더북(TheBook)

TAKEAWAY 5.26 십진 부동 소수점 상수의 실제 값은 리터럴 값과 다를 수 있다.

예를 들어 필자의 머신에선 상수 0.2의 값이 0.2000000000000000111이므로 0.20.2000000000000000111의 값이 서로 같게 된다.

십육진 부동 소수점 상수는 부동 소수점 값을 바이너리로 잘 표현하도록 고안됐다. 실제로 대다수의 최신 아키텍처에서 (자릿수가 너무 많지 않은) 십육진 부동 소수점 상수는 리터럴 값과 일치한다. 아쉽게도 이런 괴물 같은 값은 사람이 읽기 힘들다. 예를 들어 0x1.99999AP-30xC.CCCCCCCCCCCCCCDP-6이라는 두 상수를 살펴보자. 첫 번째 상수는 1.60000002384 * 2-3에 해당하고, 두 번째 상수는 12.8000000000000000002 * 2-6에 해당한다. 따라서 십진 부동 소수점으로 표현할 때 두 값은 대략 0.20000000298과 0.200000000000000000003이 된다. 따라서 값으로 보면 두 상수가 비슷하지만 십육진 부동 소수점 상수 표현으로는 상당히 달라진다.

마지막으로 부동 소수점 상수는 float을 의미하는 f 또는 F로 시작하거나 long double을 의미하는 l 또는 L로 시작할 수 있다. 이렇게 적지 않으면 모두 double 타입이 된다. 주의할 점은 같은 리터럴이라도 상수의 타입에 따라 값이 달라진다는 것이다. 대표적인 예로 다음과 같은 경우가 있다.

▼ 표 5-4 타입에 따라 다른 리터럴 값

 

float

double

long double

리터럴

0.2F

0.2

0.2L

0x1.99999AP-3F

0x1.999999999999AP-3

0xC.CCCCCCCCCCCCCCDP-6

TAKEAWAY 5.27 리터럴은 값과 타입과 바이너리 표현으로 구성된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.