Languages
0.1+0.2? 부동소수점의 정밀도 문제...
나모찾기
2013. 10. 31. 11:59
전에 자바스크립트 책을 읽다가 부동소수점의 경우 연산의 결과가 원하는 결과랑 다를 수 있으므로 통화와 같이 민감한 데이터는 정수형으로 고쳐서 만들라는 팁을 읽을 적이 있었다.
자바스크립트
> (0.1 + 0.2)
0.30000000000000004
0.3이 아니구나!!
C언어
double d1 = 0.1;
double d2 = 0.2;
double d3 = 0.3;
printf("%f + %f => %f\n", d1, d2,(d1+d2));
printf("%d\n", (d1+d2 == d3));
결과
0.100000 + 0.200000 => 0.300000
0
자바
public class Addtion {
public static void main(String[] args) {
System.out.println( 0.1 + 0.2 == 0.3 );
}
}
결과
false
그래서 jUnit에 소수 비교에 3번째 인자가 존재하는 구나.
사실 gtest에도 마찬가지 정밀도 인자가 있다.