Brise

부동소수점 변수의 정확도 본문

프로그램

부동소수점 변수의 정확도

naudhizb 2014. 9. 18. 18:07
반응형

부동소수점 연산은 오버플로우 에러의 가능성이 낮다는 장점이 있다. 


부동 소수점 변수의 정확도를 알기 위해서 간단한 테스트를 해보았다.

32비트의 float형 변수와
64비트의 double형 변수의 정확도를 알아보기 위해서
값을 입력한 뒤에 어느 숫자부터 부정확해지는지 알아보도록 하였다.

테스트 코드는 다음과 같다.

#include <stdio.h>


int main (void)

{
        float f = 1.123456789123456789;
        double d = 1.123456789123456789;
        printf("Original:\t1.123456789123456789\n");
        printf("float:\t\t%2.20f\ndouble:\t\t%20.20f\n",f,d);
        return 0;
}



위 파일을 실행시켜보았을 때에 다음과 같은 결과를 보였다.




~/test$ ./a.out 
Original:         1.123456789123456789
float: 1.12345683574676513672
double: 1.12345678912345681155


결과 값을 보았을 때 
float형은 7개 자릿수가 정확했고 (8번째 자리부터 반올림)
double형은 15개 자릿수가 정확했다.(16번째 자리부터 반올림)

참고로 그 뒤엣자리수를 강제적으로 출력하게 되면 가짜값을 이용해 채우는 것을 알 수 있었다.
(때문에 미세한 자릿수가 중요한 경우에는 다른 방법의 테크닉을 써야하지 않을까 싶다.)

임베디드 컴퓨팅에서는 FPU가 없는 경우에는 결과값이 예측 가능하다면 고정 소수점 연산을 쓰는 것이 좋을 것 같다.




반응형

'프로그램' 카테고리의 다른 글

옛날 8비트 시절의 그래픽 구현 테크닉  (0) 2015.12.20
정보 보안 및 해킹 관련 사이트  (0) 2015.12.18
OpenCV로 웹캠 읽어오기  (0) 2015.12.17
칼만필터  (0) 2015.04.21
B-spline  (0) 2014.11.07
임베디드 통신  (0) 2014.09.17
장치 대역폭 목록  (0) 2014.09.05
Comments