C#에서 실수를 다룰 때 가장 많이 사용되는 두 가지 부동 소수점 타입이 바로 float와 double입니다. 이 두 타입을 구분하는 핵심 기준은 정밀도(precision)입니다.
float vs double, 무엇이 다른가?
float — 단정밀도(Single Precision)
float는 단정밀도 32비트 부동 소수점 데이터 타입입니다. 메모리를 적게 사용하므로 대량의 실수 데이터를 처리할 때 유리하며, 약 6~9자리의 유효 숫자를 표현할 수 있습니다.
double — 배정밀도(Double Precision)
double은 배정밀도 64비트 부동 소수점 데이터 타입으로, float보다 약 두 배의 저장 공간을 사용합니다. 약 15~17자리의 유효 숫자를 지원하기 때문에 과학 계산이나 고정밀 연산에 적합하며, 별도 접미사 없이 리터럴을 작성하면 기본적으로 double로 해석됩니다.
표현 가능한 값의 범위
float 타입의 범위
-3.4 x 10³⁸ ~ +3.4 x 10³⁸
double 타입의 범위
±5.0 x 10⁻³²⁴ ~ ±1.7 x 10³⁰⁸
double은 float에 비해 훨씬 넓은 범위의 값을 표현할 수 있어, 매우 크거나 아주 작은 수를 다뤄야 하는 상황에서 안정적입니다.
기본(Default) 값
타입별 기본값도 서로 다릅니다. 특히 리터럴을 코드에 직접 작성할 때 접미사(suffix)를 붙여야 한다는 점에 유의하세요.
- float 기본값:
0.0F— 리터럴에는 반드시f또는F접미사 필요 - double 기본값:
0.0D— 접미사d또는D는 생략 가능(기본 타입)
어떤 타입을 선택해야 할까?
일반적인 상황이라면 정밀도가 높고 C#의 기본 부동 소수점 타입인 double을 사용하는 것이 권장됩니다. 반면 게임 엔진(예: Unity의 Vector3)처럼 수많은 실수 연산이 반복되는 성능 민감 환경에서는 메모리와 연산 비용이 적은 float가 더 적합합니다. 금융 계산처럼 정확한 소수 표현이 필수라면 부동 소수점 타입 대신 decimal 타입을 고려하는 것이 좋습니다.