파이썬에서 부동소수점은 float로 나타내며 int와 같이 불변형입니다. 단정도(single precision) 방식에서 32비트 부동소수점을 나타낼 때 1비트는 부호 sign (1:양수, 0:음수), 23비트는 유효 숫자 자릿수 (significant digits), 8비트는 지수(exponent)입니다.
예를 들어 십진수 -118.625(10) 를 32비트 단정도로 표현해 보았을때, 먼저 숫자의 절댓값을 이진수로 변환합니다. 부호는 음수이므로 1입니다.
118 / 2 = 59 ... 0
59 / 2 = 29 ... 1
29 / 2 = 14 ... 1
14 / 2 = 7 ... 0
7 / 2 = 14 ... 1
3 / 2 = 1 ... 1
0.625 * 2 = 1.250
0.250 * 2 = 0.500
0.500 * 2 = 1.000
즉, 1110110.101(2) = 1.110110101(2) * 2^6 입니다.
그 다음 변환된 이진수를 다음과 같이 정규화합니다.
위의 숫자를 가수부(23비트)에 넣습니다. 부족한 자릿수는 0으로 채웁니다.
지수는 6이므로 바이어스(bias)를 더합니다. 즉, 지수 6에 127(0111 1111(2)) 더합니다.
6(10) + 127(10) = 133(10) = 10000101(2)
이상의 결과를 종합하여 -118.625(10)를 32비트 단정도로 표현한 결과는 다음과 같습니다.
배정도(double precision) 방식에서는 64비트 부동소수점을 나타낼 때 1비트는 부호, 52비트는 가수, 11비트는 지수로 나타냅니다. (단정도 방식이때 127(2^7-1)을 더하고, 배정도 방식일 때 1023(2^10 - 1) 을 더합니다.)
'프로그래밍 > 자료구조' 카테고리의 다른 글
[자료구조 / 파이썬] 정수, int (0) | 2019.11.14 |
---|