=============================================================
부동소수점의 표현은 float, double, long double 등의
표현 방법이 조금씩 다릅니다. 하지만 기본은 같으니 일단
float형을 기준으로 설명합니다.
(계산하기 귀찮아서 “C로 배우는 알고리즘” 의 책에서 예를 인용합니다.)
float 형은 32bit로 구성되며 부호부(signed bit),
지수부(exponent part), 가수부(fraction part 또는 Mantissa) 로
이루어져 있습니다.
예에서, ( 이 예는 계산하기 너무 힘듦… )
0 10000101 00000000000000010101101
첫 번째 1 bit가 부호부,
두 번째 8 bit가 지수부,
뒤의 23 bit가 가수부입니다.
부호부는 0이면 +, 1 이면 – 입니다.
지수부는 그 자체가 지수부의 값이 아니라 이 수치에서 bias 값을 빼 주어야
그 값이 나옵니다. 일반적으로 float에서 bias의 값은 127 입니다.
가수부는 가장 좌측의 값이 20 를, 그 다음이 2-1, 그 다음은 2-2, … 입니다.
지수부를 e, bias를 b, 가수부를 m 이라고 한다면 그 값은
m x 2(e-b)
가 됩니다.
예를 들어 1/16 = 0.0625 를 실수로 표현해 보면
0 01111111 00001000000000000000000 = 1/16 x 2(127-127)
0 01111110 00010000000000000000000 = 1/8 x 2(126-127)
0 01111101 00100000000000000000000 = 1/4 x 2(125-127)
0 01111100 01000000000000000000000 = 1/2 x 2(124-127)
0 01111011 10000000000000000000000 = 1/1 x 2(123-127)
등 여러 가지 표현이 있을 수 있는데 기준을 정한 것이 가수부의 최좌측 비트는 무조건
1~2의 값으로 만듭니다. 그런데 최좌측 비트가 무조건 1이라면 굳이 1을 쓰지 않아도
되니 1을 생략해서 표현합니다.
여기까지 입니다.
이제 진짜 예를 들어 보겠습니다.
0 10000000 10000000000000000000000
이라는 값이 있다면
가수부는 앞에 1이 생략되어 있으므로 실제로는 11 이므로
1 x 20 + 1 x 2-1 = 3/2 = 1.5 가 되고
지수부는 2(128-127) = 2 이므로
최종적으로 1.5 x 2 = 3 이라는 수가 됩니다.
예를 하나 더 들어 볼까요?
1 01111110 00000000000000000000000
는 어떤 값이 됩니까?
가수부는 1 (생략되어 있다고 했죠.)
지수부는 2(126-127) = 2-1
결론은 (-) 1 x 2-1 = -0.5
'전공 수업 CS > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 주기억장치 DRAM | DRAM의 동작원리 (0) | 2022.11.17 |
---|---|
[컴퓨터 구조] 카르노맵 (0) | 2022.10.12 |
[컴퓨터 구조] 부동 소수점 & 바이어스 수 biased number 127 (0) | 2022.09.23 |
[컴퓨터 구조] 1의 보수와 2의 보수 표현법 이해 (1) | 2022.09.23 |
[컴퓨터 구조] 정수 표현 | (-0)의 2의 보수가 존재하지 않는 이유 (0) | 2022.09.22 |