IEEE 754 – floating point (부동소수점)
이 글은 라엘이가 컴퓨터공학전공 학부과정 1학년때 배운 내용을 정리한 것이다.
IEEE 754는 컴퓨터에서 소숫점을 표현하기 위한 방법이다.
single precision은 32비트 즉 4 Byte 에 저장하고
double precision은 64비트 즉 8 Byte 에 저장한다.
float num1 = 0.75; // single precision double num2 = 0.75; // double precision
이 비트를 3부분으로 나누어 음수, 소수부분, 지수부분으로 인식한다.
(-1)^S * (1 + M) * 2^E
S : Sign (부호)
부호 0이면 양수, 1이면 음수
E : Exponent (지수)
지수부분 기본적으로 unsigned 이며 single precision에선 127, double에선 1023을 뺀다
M : Mantissa (가수)
앞쪽 비트부터 2^-1, 2^-2… 를 의미한다.
//08.10.22내용추가
위와 같이 표현하여서 이 방식을 SEM표현방식이라고도 한다.
//09.02.19내용추가
부동소수점 방식을 사용하는 이유는 한정된 자료 공간에서 더 넓은 범위의 숫자를 표현하기 위해서이다.
이에 이 방식에는 정밀도 라는 것이 있다.
고정된 길이에서 Exponent 부분을 늘이면 표현범위가 늘어나고 정밀도가 떨어진다.
고정된 길이에서 Fraction 부분을 늘이면 정밀도가 향상되고 표현범위가 줄어든다.
single [sign : 1bit][exponent : 8bit][fraction : 23bit]
double [sign : 1bit][exponent : 11bit][fraction : 52bit]
1 0111 1110 1000 0000 0000 0000 0000 000
이 수를 single precision으로 보고 해석하면
S(SignBit) : 1 -> 음수를 나타냅니다.
0111 1110 = 126
E = 126 - 127 = -1
M = 1000 0000 0000 0000 0000 000 = 2^(-1) = 0.5
따라서 (-1)^S * (1 + M) * 2^E 의 식에 대입해보면
답은 (-1)^1 * (0.5+1) * 2^(-1) = -0.75 가 된다.