Java에서 double형과 float형은 모두 부동소수점(floating-point) 숫자를 표현하는 데 사용됩니다. 그렇다면 어떤 경우에 double형이 float형보다 선호될까요? 핵심은 정밀도(precision)와 정확도(accuracy)에 있습니다. 더 정밀하고 정확한 결과가 필요하다면 double형을 사용하는 것이 좋습니다.
정밀도 비교: double vs float
두 타입의 가장 큰 차이는 표현할 수 있는 소수점 자릿수입니다.
- double형: 소수점 약 15~16자리까지 정밀하게 표현 가능
- float형: 소수점 약 6~7자리까지만 표현 가능
따라서 금융 계산, 과학적 연산처럼 높은 정밀도가 요구되는 작업에는 반드시 double형을 사용해야 합니다. 반면 float형은 메모리를 절약하면서 대량의 숫자 데이터를 저장할 때 유용합니다.
권장 사용 방식
- double형: 모든 계산 과정과 임시 변수(temp variables)에 사용
- float형: 숫자 배열 등 대용량 데이터를 저장할 때 사용
내부 구조와 기본값
두 타입은 내부적으로 지수부(exponent)에 할당되는 비트 수가 다릅니다.
| 구분 | double형 | float형 |
|---|---|---|
| 부호(sign) | 1비트 | 1비트 |
| 지수(exponent) | 11비트 | 8비트 |
| 기본값 | 0.0d | 0.0f |
지수부가 더 넓은 double형은 float형보다 훨씬 넓은 범위의 값을 정확하게 표현할 수 있습니다.
예제 코드
public class DoubleFloatTest {
public static void main(String []args) {
double d = 55.637848675695785;
float f = 25.657933f;
System.out.println("Value of double: " + d);
System.out.println("Value of float: " + f);
}
}
실행 결과
Value of double: 55.637848675695786 Value of float: 25.657932
위 실행 결과를 보면 알 수 있듯이, double형은 소수점 이하 값이 거의 그대로 유지되는 반면, float형은 이미 몇 자리의 정밀도 손실이 발생한 것을 확인할 수 있습니다. 이것이 바로 정밀한 계산이 필요한 상황에서 double형을 선호해야 하는 이유입니다.