컴퓨터구조

부동소수점 이해하기

FORHAPPy 2021. 9. 7. 02:47

<1> 부동 소수점의 오차

 

1/3을 소숫점으로 표현하면 0.333333...처럼 끝이 없는 수인 것을 알고 있다.

이것을 십진 무한 소숫점 수 라고 한다.

마찬가지로 이진법에서도 이진 무한 소숫점 수가 있다. 

대표적으로 0.1이다. 0.1을 이진법으로 표현하면 0.10000000149011611938..로 끝이 없는 수가 나타난다.

컴퓨터는 유한한 저장공간을 가지고 있고, 그 중 실수는 32비트(float) 또는 64비트(double)에 저장 된다.

따라서 컴퓨터(2진법을 사용)는 십진법의 0.1을 정확하게 이진법으로 같은 값을 나타낼 수 없다. 

0.1 * 0.1 조차도 이진법의 0.01 근사값이 아니다. 따라서 연산이 많아질 수록 오차는 더 커질 것이다.

0.1 * 0.1 (0.1 의 이진법의 제곱) = 0.0100000007078...
0.01의 이진법 = 0.0099999997764...

 

<2>IEEE 부동 소수점 수 표준

 

<바이어스(biased : 편향된)표현법>

지수부가 8bit인 경우 가장 작게 표현 할 수 있는 수 -127 을 0000 0000으로 표현하였다.

이렇게 나타낸 이유는 지수부분 (2의 거듭제곱부분)이 음수여도 밑이 양수이면 값은 양수가 되기 때문이고,

지수부분을 소수점 표현의 앞쪽에 위치 시켜 부동소수점의 대소 비교를 하기 편해지기 때문이다.

0000 0000이 가장 작은 값이고 앞자리가 커질 수록 큰 수 이기 때문에 대소 비교하기가 편리하다.

 

<바이어스 상수>

기본 정밀도(32비트 중 정수에 할당된 8비트) : +127

2배 정밀도(64비트 중 정수에 할당된 11비트) : +1023

바이어스 상수 : 2^(n-1) -1 이다. (n는 정수에 할당 된 비트)

 

(-1)*s  *  1.m  *  2^(e-127)     :  CPU에 로드 될때 이렇게 다시 로드된다.

<바이어스 표현법으로 이진화하기>

 

1. 19.25를 2진법으로 변환 >> 10011.01

2. 정규화 ( 1. xx * 2^형태로 변환 ) >> 1.001101 * 2^4

3. 여기서 지수부분(4) 에 127을 더함 >> 131

4. 131을 2진법으로 나타내면 1000 0011 이 된다.

5. 0(부호부분)1000 001(지수부분)001101(가수부분) (뒤에 생략)

6. 즉 0100 0001 0011 0100 0000 0000 0000 0000 으로 표현될 수 있다.

'컴퓨터구조' 카테고리의 다른 글

시간을 만들어내는 회로  (0) 2021.09.14
8비트와 16비트  (0) 2021.09.14
자료형의 크기 및 숫자 표현 범위  (0) 2021.09.08
ROM, 블록장치, SSD와 HDD  (0) 2021.09.08