TechNotes
float보다 double을 더 많이 사용하는 이유는 무엇일까?
float와 double의 차이, 32비트에서 64비트 환경으로 변화하면서 double이 기본 선택이 된 이유
Q. float는 4Byte이고 double은 8Byte인데 왜 double을 더 많이 사용할까?
수업을 듣던 중, 강사님께서 평소 float와 double 중 어떤 자료형을 사용하는지 질문하셨다.
평소 코딩테스트를 준비할 때나 전공 수업을 들을 때도 주로 float을 이용했다.
float는 4Byte, double은 8Byte이다.
그렇다면 메모리를 절약하려면 float를 사용하는 것이 더 좋은 선택 아닐까?
하지만 대부분의 프로그램에서는 double을 기본으로 사용한다고 한다.
왜 double을 기본처럼 사용할까?
A. 현대 컴퓨터에서는 메모리 절약보다 계산의 정확성이 더 중요하기 때문이다.
과거에는 메모리 용량이 매우 제한적이었다.
따라서 4Byte인 float를 사용하는 것만으로도 의미 있는 메모리 절약 효과를 얻을 수 있었다.
하지만 현재는 대부분의 PC와 서버가 수 GB 이상의 메모리를 사용하며, 8Byte를 사용하는 부담이 과거보다 크게 줄어들었다.
이러한 환경에서는 메모리 절약보다 계산의 정확성과 안정성을 확보하는 것이 더 중요해졌고, 그 결과 double이 기본적으로 많이 사용된다.
double은 더 높은 정밀도를 제공한다.
float와 double의 가장 큰 차이는 표현 가능한 숫자의 정밀도이다.
| 자료형 | 크기 | 유효 자릿수 |
|---|---|---|
float |
4Byte | 약 7자리 |
double |
8Byte | 약 15~16자리 |
반복 계산이나 소수 연산이 많은 프로그램에서는 작은 오차가 계속 누적될 수 있다.
double은 이러한 누적 오차를 크게 줄여주므로 과학 계산, 금융 프로그램, 게임 엔진 등 다양한 분야에서 기본적으로 사용된다.
float가 항상 더 빠른 것은 아니다.
많은 사람들이 메모리가 절반이므로 연산도 더 빠를 것이라고 생각한다.
하지만 현대 CPU는 float와 double 모두를 하드웨어에서 처리한다.
또한 C/C++에서는 실수 리터럴의 기본 타입도 double이다.
double a = 3.14;
float b = 3.14f;
표준 수학 라이브러리(sqrt, sin, cos, log 등) 역시 대부분 double을 기준으로 제공된다.
또한 float도 연산 과정에서 CPU 내부 연산 정밀도를 사용하여 계산한 뒤 다시 float에 저장될 수 있다.
float a = 1.2f;
float b = 3.4f;
float c = a + b;
개념적으로는 다음과 같은 과정을 거친다고 이해하면 된다.
float
↓
CPU 내부 연산 정밀도
↓
연산 수행
↓
float로 저장
실제 내부 구현은 CPU와 컴파일러에 따라 다르지만, 중요한 점은 float를 사용한다고 해서 항상 더 빠른 것은 아니라는 것이다.
그렇다면 언제 float를 사용할까?
메모리 사용량이 성능에 직접적인 영향을 주는 환경에서는 float를 적극적으로 사용한다.
대표적인 예시는 다음과 같다.
- GPU(OpenGL, CUDA, DirectX)
- 머신러닝의 FP32 연산
- 임베디드 시스템
- 모바일 환경
- 대용량 배열이나 이미지 처리
수백만 개 이상의 데이터를 저장하는 경우에는 4Byte 차이만으로도 상당한 메모리를 절약할 수 있기 때문이다.
자주 하는 오해
- 64비트 운영체제에서는
float도 8Byte가 된다.- 아니다. 일반적으로
float는 4Byte,double은 8Byte이다.
- 아니다. 일반적으로
double을 많이 사용하는 이유는 64비트 운영체제이기 때문이다.- 아니다. 운영체제 때문이 아니라, 현대 컴퓨터의 메모리와 CPU 성능이 크게 향상되면서
double을 사용할 부담이 줄어들었기 때문이다.
- 아니다. 운영체제 때문이 아니라, 현대 컴퓨터의 메모리와 CPU 성능이 크게 향상되면서
float가 메모리를 적게 사용하므로 항상 더 빠르다.- 아니다. 현대 CPU에서는 두 자료형 모두 하드웨어에서 처리하며 일반적인 프로그램에서는 성능 차이가 크지 않다.
정리
float는 4Byte,double은 8Byte이다.double이 많이 사용되는 이유는 64비트 운영체제 때문이 아니라 현대 하드웨어 환경에서 메모리 부담이 크게 줄었기 때문이다.double은float보다 약 두 배 이상의 정밀도를 제공해 계산 오차를 줄일 수 있다.- 일반적인 애플리케이션에서는
double을 사용하는 것이 더 적합하다. - 메모리 사용량이 중요한 환경에서는
float를 선택하는 것이 유리할 수 있다.
댓글