오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 13. Floating Point number 2 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 13. Floating Point number 2

쫑알bot 2023. 10. 15. 02:35
728x90

Single-Precision 에서 숫자의 범위를 본다면

( * Exponents 에서 00..00이랑 11..11은 특정한 목적에 따라 사용함 ) 

 

 

   -   가장 작은 값

 

    ● Exponent 는 00000001부터 가능하므로, 1 - 127 = -126 

    ● Fraction : 0000..00 일 때 가장 작음

 

 

   -   가장 큰 값

 

    ● Exponent 는 11111110부터 가능하므로, 254 - 127 = 127 

    ● Fraction : 111..11 일 때 가장 큼

 

 


[ 생각해볼 것 1 ]

만약 32비트 모두가 0이면? 

-> 그냥 숫자 0을 나타내는 것이다. 

** 1.0 * 2^-127로 오해하지 않기!

 

 

[ 생각해볼 것 2 ]

Underflow : 큰 숫자 말고, 작디 작은 숫자는 큰 정확성을 요구한다, 하지만 그걸 표현할 수 없을 때, Underflow라고 함

ex) 1.0 * 2^-129

 

 

Exercise 1)

 

Represent –3.3125

 

Exercise 2)

다음 수가 single-precision로 표현되어 있다. 이 수는 무엇을 나타내는가?

11000000101000…00

 

fraction은 소수점 이하로만 가져오는 거 

+ 정수는 항상 1이라는 거 생각하기

 


언더플로우라 표현 못하는 숫자는

Denormalized 식으로 표현 가능하다.

 

 

Exponent 가 모두 0일 땐, 그 숫자의 정수 부분은 0으로 취급할 것이다.

아래처럼 표현할 수 있다.

위 식 : Exponent가 모두 0  / 아래 식 : Exponent,Fraction 모두 0

 

 

 


덧셈 연산

 

방법

 

1) 십진수면 10^a , 이진수면 2^b. 연산하는 두 개의 수의 소수점을 일치시킨다.

     = 두 개 수의 Exponent를 일치시키면 된다. (큰 쪽으로 맞춤)

 

* 그 과정에서 소수점 제한때문에 사라지는 숫자들이 있음

 

2) 숫자들끼리 더한다.

 

3) 그 식을 다시 정규식으로 바꾼다.

 

4) (필요하다면) 소수점을 좀 더 조정해준다

 

 

 

exercise )

 

[ 1.000 × 2^-1 ]  + [ –1.110 × 2 ^-2]        (0.5 + –0.4375)

 

1) 소수점 맞추기  - >  2^-1이 더 크므로 얘한테 맞춰준다.

> 1.000 * 2^-1    +  -0.111*2^-1

 

2) 숫자끼리 더하기   - > 1000 - 0111

> 넘쳐 오른 애 (carry out)는 없애기 > 0.001 * 2^-1

 

3) 정규화 하기  - > 다시 얘를 1.aa * 2^b 형식으로 만들기

> 1.000 * 2^-4

 

4) 필요하면 다듬어주기

> 할 필요 X,  1.000 * 2^*4 = 0.0001 = 0.0625 

 

 

exercise 2)

1.0110 x 2^3 + 1.1000 x 2^2

 

 

 

exercise 3)

1.0110 x 2^3 + 1.1001 x 2^2

 

 

 


곱셈 연산

1. 지수끼리는 더하고 Bias를 빼준다.

지수+지수 - 127

 

2. 숫자 전체끼리 곱한다.

 

3. 정규화 해준다. = 1.xx꼴로 만들기 위해 비트를 옮겨주고 2^a 에서 a를 조정한다.

 

4. 부호를 맞춰준다. ( 두 수의 부호가 같았으면 + ,아니면 - )

 

 

exercise)

(1.0110 x 2^3) x (1.1100 x 2^2 )

 

1) 지수 계산

 

1.0110 x 2^3

→ 지수 3+127 = 130 = 10000010

→ 소수점 : 0110 ...

=0 10000010 011000 ...

 

1.1100 x 2^2 =  0 10000001 110000...

→ 지수 2+127 = 129 = 10000001

→ 소수점 : 110000 ...

 

130 + 129 -127 = 132 = 10000100

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

2) 숫자끼리 곱하기

   1.0110...

*  1.1100...

= 10.0110100...

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

3) 결과를 정규화하기

10.0110100... * 2^5 를 1.xx로 만들어주기 위해서는 소수점 위치를 한 자리 옮겨야한다.

1.00110100... * 2^6 

→ 지수 : 6+127 = 133   / 소수점 아래 00110100...

    = 0 10000101 00110100...

 

소수점을 왼쪽으로 옮기면 지수를 더해주고

           오른쪽으로 옮기면 지수를 빼준다.

 

 


3개 풀어보기

 

 

(출처)

한동대학교 용환기교수님