C/C++에서 float와 double의 차이점
C/C++에서 소수점을 가진 실수(floating point number)를 표현하려면 float 또는 double 자료형이 필요합니다. 두 자료형 모두 실수를 다룰 수 있지만, 제공하는 정밀도(precision)에서 중요한 차이를 보입니다.
간단히 말해, double은 float보다 약 2배 더 높은 정밀도를 가집니다. 즉, double은 배정밀도(double precision), float는 단정밀도(single precision) 방식으로 실수를 저장합니다.
비트 구성과 정밀도
double은 64비트로 실수를 표현합니다. 부호 1비트, 지수 11비트, 가수 52비트로 구성되며, 약 15자리의 십진수 정밀도를 제공합니다.
반면 float는 32비트로 실수를 표현합니다. 지수 8비트, 가수 23비트로 구성되며, 약 7자리의 십진수 정밀도를 제공합니다.
메모리 사용량
double이 float보다 정밀도가 높기 때문에, 당연하게도 double은 float의 두 배에 해당하는 메모리를 차지합니다. 따라서 메모리 사용량 역시 자료형 선택 시 고려해야 할 중요한 요소입니다.
표현 범위
두 자료형의 표현 범위는 다음과 같습니다.
- float: 약 ±3.40282347E+38, 유효 숫자 6~7자리
- double: 약 ±1.79769313486231570E+308, 유효 숫자 15~16자리
어떤 자료형을 선택해야 할까?
높은 정밀도가 필요하지 않고 대량의 실수 배열을 저장해야 하는 경우에는 float가 메모리를 절약할 수 있는 비용 효율적인 선택입니다. 반면, 과학 계산이나 금융 데이터 처리처럼 더 높은 정밀도가 요구되는 상황이라면 double을 사용하는 것이 바람직합니다.