Effective Java

[9장] Item 60. 정확한 답이 필요하다면 float와 double은 피하라

앙두딘 2022. 7. 26. 02:03

9장. 일반적인 프로그래밍 원칙


 

float, double 대신 BigDemical이나 int/ long을 사용하라

 

 

 

float과 double타입은 과학, 공학 계산용으로 설계되었다.

이진 부동소수점 연산에 쓰이고, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다.

따라서 정확한 결과가 필요할 때는 사용하면 안 된다.

 

System.out.println(1.03 - 0.42);	//0.6100000000001
System.out.println(1.00 - 9*0.10);	//0.09999999999999998

위와 같이 doule, float형은 정확한 수치 계산 결과를 내놓을 수 없다.

이를 해결하기 위해서는 BigDemical 또는 int, long을 사용해야 한다.

 

BigDemical의 단점?

기본 타입보다 쓰기가 훨씬 불편하고, 훨씬 느리다.

 

int, long?

다룰 수 있는 값의 크기가 제한되고, 소수점을 직접 관리해야 한다.

달러/센트 계산의 경우, 모든 계산을 달러 대신 센트로 수행하면 이 문제가 해결된다.

 

소수점 추적은 시스템에 맡기고, 코딩 시의 불편함이나 성능 저하를 신경쓰지 않겠다면 BigDemical을 사용하라.
반면, 성능이 중요하고 소수점을 직접 추적할 수 있고, 숫자가 너무 크지 않다면 int나 long을 사용하라.
숫자를 9자리 십진수로 표현할 수 있다면 int, 열여덟자리 십진수로 표현할 수 있다면 long, 그 이상 넘어가면 BigDemical을 사용해야 한다.