자바의 경우 모든 실수 연산에서 소수점 오류가 발생하는 것은 아닙니다.
아래의 코드와 결과를 보면 이해하실 겁니다.
@Test
public void testPrintJavaDouble() {
for (double i=0; i<100; i++) {
double b = i / 100 * 100;
if (i != b) {
System.out.println(i + ":" + b);
}
}
}
실험결과 !
7.0:7.000000000000001
14.0:14.000000000000002
28.0:28.000000000000004
29.0:28.999999999999996
55.0:55.00000000000001
56.0:56.00000000000001
57.0:56.99999999999999
58.0:57.99999999999999
위와 같이 특수한 경우에 발생할 수 있습니다.
다만, 이 문제가 시사하는 바는 이러한 경우를 기억하기 보다는 적절한 유형과 연산을 사용하자는 겁니다. 자바의 실수(float, double) 타입의 경우 100% 정확한 정밀도를 가진다기 보다는 근사치의 정확도를 가진다고 말합니다. 즉, 돈, 주식과 같은 아주 세밀한 정밀도를 따지는 연산에는 적당하지 않다는 의미입니다.
'프로그래밍 > java' 카테고리의 다른 글
Jenkov.com - Java Data Types (0) | 2015.03.13 |
---|---|
CopyOnWriteArrayList in Java (0) | 2014.10.24 |
자바 입문서로 손색이 없는 '소설같은 자바 2' (0) | 2008.08.30 |