본문 바로가기

프로그래밍/java

자바의 실수연산에 대한 실수

자바의 경우 모든 실수 연산에서 소수점 오류가 발생하는 것은 아닙니다.
아래의 코드와 결과를 보면 이해하실 겁니다.

@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