ੈ✩‧₊˚Computer Science/컴퓨터구조

[컴퓨터구조] 부동 소수점 연산(Floating point number arithmetic)

샨샨 2020. 11. 22. 21:32
반응형

floating point number arithmetic이 왜 필요한가? 

- 소수점 표현을 위해 ex) 3.1416

- 아주 작은 수 표현을 위해 ex) 0.00000001

- 아주 큰 수 표현을 위해 ex) 3.1555 & 10^9

 

부동 소수점 연산 notation

-coefficient : 계수 , base number : 진수 , exponent : 지수

ex) 7.151666 * 10^4 ( coefficient : 7.151666, base number : 10, exponent : 4 )

 

▩ 10진수의 경우 coefficient 의 범위는 1 <= coefficient < 10 이다.

▩ 2진수의 경우 coefficient 의 범위는 1 <= coefficient < 2 이다.

 

2진수 소수점 표현법 (Normalized scientific notation)

- sign, significand, exponent

- significand의 길이가 늘어나면 정확도(accuracy)가 높아짐

- exponent의 길이가 늘어나면 범위(range)가 높아짐

- 32bit 안에서 sign, significand, exponent를 적절히 나눠야함

- significand = 1 + fraction

 

IEEE754 표준 생성

- single precision (32 bit) : 8 bit exponent, 23bit fraction

- double precision (64bit) : 11bit exponent, 52bit fraction

지수(exponent)는 양/음을 구별할 수 있어야하는데, 이때 two's complement를 쓰는 것이아니라 바이어스(bias)를 사용한다.

-single precision 의 bias : 127 ( 2^7 -1)

-double precision의 bias : 1023 (2^10 -1)

 

예를 들어, 2^10이라면 exponent에 10+127인 137을 입력함 or 2^-10이라면 exponent에 -10+127인 117을 입력함

-exponent의 8bit가 모두 0 = -127이 아니라 0으로 생각함

-exponent의 8bit가 모두 1 = 128 이 아니라 무한대(infinity)로 생각함

따라서 범위는 -126 ~ 127이라고 생각하는 것이 편함

 

최종 공식

-overflow : 지수의 최고 범위(127)를 초과했을때

-underflow : 지수의 범위보다 이하일때 (-126보다 작을때)

 

2진수의 덧셈 계산법

문제) 1.0110 X 2^3 + 1.1000 X 2^2

 

1. 2진수의 지수를 맞춘다.

2.significand끼리 더한다.

3.소수점을 1로 맞춰준다. (normalize)

4. 반올림을 해줘도 되지만 더한수와 결과가 모두 4bit이니 해주지 않아도 된다.

 

곱셈 계산법

 

1. 지수끼리 계산한다.

지수 = A의 지수 + B의 지수 - bias (127 or 1023)

 

2.significand끼리 곱한다.

sig = A의 sig X B의 sig

 

3.결과를 표준화한다. (normalize)

- leading bit가 1이되도록 계산한 sig를 오른쪽으로 shift하기

- overflow 체크하기

- 반올림하기

 

4.부호 확인

- 양수 or 음수

 

문제) (1.0110 X 2^3) X (1.1100 X 2^2) = [0 | 10000010 | 01100000....] X [0 | 10000001 | 110000....]

1.지수 계산

130 + 129 - 127 = 132 [10000100]

 

2.sig 곱셈

1.011000... X 1.110000... = 10.01101000...

 

3.product normalize

product = 10.01101000... X 2^10000100 ☞ 1.001101000... X 2^100000101

 

4.부호 확인

sign = 0 (양수)

 

5.결과

[0 | 100000101 | 0011010000... ] = 1.001101000... X 2^6

 

 

 

 

 

반응형