Whiteship's Note

Java에서 실수 표현 부정확성

Java : 2006.11.15 16:03


Agile Java 4장 번역서 p180~p181에 걸쳐 실수 표현의 부정확함에 대한 내용이 나옵니다. 어떤 문제가 있으면 어떻게 해결할 수 있을지 고민해 봅니다.

먼저 float로 테스트를 해봤습니다.

more..


double로도 테스트를 해봤습니다.

more..


해결책으로 제시된 방법은
1. 반올림을 사용한다.
2. BIgDecimal 클래스를 사용한다.

먼저 1번 방법을 사용해보려고 Math 클래스의 메소드들을 들여다 봤습니다. return type이 전부 정수 형태 입니다.

이걸 사용해서 실수를 반올림하면 조금 난감한 상황이 발생할 것 같습니다. -_-;;;

DecimalFormat class를 사용해봤습니다.

more..


두 번째 방법인 BIgDecimal을 사용해보겠습니다.

more..


번외로 Wrapper 클래스를 가지고도 해봤습니다.

more..


참고할 곳 : http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=javatip&c=r_p&n=1118831957&p=3&s=t
http://javaservice.net/~java/bbs/read.cgi?m=resource&b=qna2&c=r_p&n=1118716242&p=1&s=t#1118716242
http://docs.sun.com/source/806-3568/ncg_goldberg.html    <--- 완전 수학 문서;;

위에서 발생했던 이상한 현상(0.9, 0.9 같은데도 다르다고 하던 현상)이 민재님 덕분에 해결됐습니다. assertion을 할 때 같은 type끼리 비교를 해야되는데.. 하나는 double이고 하나는 BigDecimal이였기 때문에 같은 0.9여도 fail로 나온 것입니다.

assertion을 할 때 두개의 인자만 줄 수 있는 것이 아니라 세번째 인자도 줄 수가 있는데요. API를 보겠습니다.


top