1학기때 수치해석에서 재미있게 배웠던 것 같은데.. 막상 어셈블리 시간에 또 배우니까 헷갈린다 -_-;;
32bit Single Precision(단정도 실수)
부호비트 (significant) 1bit | 지수부 (exponent) 8bit | 가수부 (mantissa) 23bit |
64bit Double Precision(배정도 실수)
80bit Exitended Precision(확장정도 실수)
부호비트 1bit | 지수부 15bit | 1 | 가수부 63bit |
※ (-1)s * 1.m * 2e - bias 형식으로 나타내는 것을 정규화라고 하며 각 s, m, e값을 메모리에 저장하게 된다.
마이너스 지수를 표현하기 위해서 지수부가 표현가능한 범위에서 bias값을 빼게 된다.
예를 들어 64bit Double Precision에서는 지수부가 211 = 2048 이므로 (1024 - 1)을 빼면 음수가 표현 가능하게 되므로
bias는 1023이 된다.
64bit Double Precision 변환 예제
462.5를 2진수로 변환하면 111001110.1 이다. 이를 정규화 시키면 아래와 같이 된다.
∴ (-1)0 × 1.110011101 × 28
부호는 양수이다
∴ 부호비트(s) = 0
정규화할 경우 첫 자리는 언제나 1이므로 생략한다(1비트를 더 사용할수 있게된다)
∴ 가수부(m) = 110011101
e - bias = 8 이므로 (64bit Double Precision에서 bias는 1023이다)
∴ 지수부(e) = 8 + 1023 = 1031 = 10000000111
메모리에 저장되는 값은
0 | 100 0000 0111 | 1100 1110 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
시험이 내일인데 IEEE floating-point standard 를 보고 있다.. 당연한 것인데 개념을 잘못 이해했나?
익숙하지 않아서 그럴 것이다 (주절주절)