C

[C] 부동소수점 정규화 (32비트)

ryancha9 2019. 12. 1. 15:33

-123.45 라는 수를 정규화하면?
float는 32비트로(32비트 = 4바이트). float는 4바이트다.
부호비트 1비트 + 지수부 8비트 + 가수부 23비트로 이루어져있다.

 

1. 부호비트를 구할 때
부호가 +는 0, -는 1이다.

 

2. 가수부를 구할 때
123을 8비트로 표현해보자
01111011이다.
이제 0.45에 2를 계속 곱해준다.

0.45 x 2 = 0.9 0
0.9 x 2 = 1.8 1
0.8 x 2 = 1.6 1
0.6 x 2 = 1.2 1
0.2 x 2 = 0.4 0
.... 반복된다.

2를 곱한 값이 1이 넘으면 1를 제거하고 다시 곱해주자.
나온 값이 1보다 크거나 같으면 1 작으면 0으로 구한다.
01111011.01110... 이 가수부이다.
여기서 소수점을 가장 앞에있는 1까지 이동시킨다. (6칸)
1.11101101110... 이 상태에서 1. 을 버린다.
남은 것은 11101101110... 이 부분이 가수부가 된다.

 

3. 지수부 구할 때
127(단정밀도의 바이어스)+6 (소수점 이동 횟수)
133이 된다.
133을 8비트로 표현해보자
10000101이다.
부호비트는 - 이므로 1이다.
이제까지 구한 값을 취합한다.
1 10000101 11101101110...
-123.45의 정규화이다.