본문 바로가기
dev, tech

[펌] float형과 double의 표현 범위

by 구띵 2006. 5. 16.

C의 float과 double 타입은 모두 부동소수 표현에 대한 국제 표준인 IEEE 754에 정의된 표현 방식을 따르고 있습니다. 각각 float은 IEEE 754의 single precision, double은 IEEE 754의 double precision 표기법을 따르는 자료형입니다. single precision은 32비트, 즉 4바이트 표현법이고, double precision은 64비트, 즉 8바이트 표현법입니다. 따라서 float은 4바이트, double은 8바이트가 되겠습니다.

 

각 자료형의 비트 할당은 다음과 같습니다.

[single precision : float 타입]

부호비트 : bit31 (1비트)

지수부 : bit30~bit23 (8비트)

만티사 : bit22~bit0 (23비트)

 

[double precision : double 타입]

부호비트 : bit63 (1비트)

지수부 : bit62~bit52 (11비트)

만티사 : bit51~bit0 (52비트)

 

지수부의 표기는 만티사에 곱해지는 2의 거듭제곱수를 나타내며, 각 표기법에서 표현 가능한 최대값은 지수부에 의해 결정됩니다. 

 

float타입의 경우, 8비트로 표현 가능한 양의 지수의 최대값은 127입니다. 만약 만티사의 모든 비트가 1이라면, 반올림하여 약 2^128 가량의 값이 됩니다. 따라서, 10진법으로 고친다면,

log (2^128) = 128 log 2 = 128 * 2.107 = 38.5318

즉, 10^38에 해당하는 값이 됩니다.

 

double타입의 경우, 11비트로 표현 가능한 양의 지수의 최대값은 1023입니다. 만약 만티사의 모든 비트가 1이라면, 반올림하여 약 2^1024 가량의 값이 됩니다. 따라서, 10진법으로 고친다면,

log (2^1024) = 1024 log 2 = 1024 * 2.107 = 308.255

즉, 약 10^308에 해당하는 값이 됩니다.

댓글