엔지니어가 되고 싶은 공돌이

04. 2진수 부동소수점수의 표현(Representation of Floating Point Number) 본문

Electric/Digital Logic Circuit

04. 2진수 부동소수점수의 표현(Representation of Floating Point Number)

Geca 2024. 7. 24. 23:49

 

4. 1. 2진수 연산과 보수(Binary Number Operations and Complement)

 

- Addition of Binary Number는 10진수처럼 더해주면 됩니다. 다만, Binary Number에서 1 + 1 처럼 자리올림(Carry)이 발생하면 윗자리에 1을 더해야 합니다.

 

 

- 컴퓨터에서는 숫자 데이터를 부호화-절댓값(Sign Magnitude), 1의 보수(1’s complement), 2의 보수(2’s complement)로 표현합니다. 지금 널리 사용되는 방법은 2의 보수(2’s complement)입니다.

 

 

- 부호화-절댓값(Sign Magnitude) : MSB(Most Significant Bit)에 0일 때는 Positive Number, 1 일 때는 Negative Number 로 표현하고, 그 뒤의 Bit에 2진수로 숫자를 저장합니다.

 

  다만 이 방법은 컴퓨터에서 연산할 때 연산의 결과가 정확하지 않고, 0을 표현하는 방법이 2가지라서 사용하지 않습니다.

 

 

- 1’s complement : 2진수에서 0은 1로, 1은 0으로 바꾸는 방법.

 

  ex) 1100 -> 0011.

 

연산의 결과가 정확하지만, 여전히 0을 표현하는 방법이 2가지라서 사용하지 않습니다.

 

 

- 2’s complement : 2진수에서 0은 1로, 1은 0으로 바꾸고 나서 1을 더하는 방법.

 

  ex) 1100 -> 0100.

 

- 컴퓨터에서는 뺄셈연산과 음수표현을 위해 보수를 사용하며, 실제로 하드웨어에 보수회로는 있지만 뺄셈회로는 없습니다.

 

 

- 부호확장(Sign Extension): 숫자를 저장하는 비트수를 늘릴 때, 부호를 고려하여 늘려주는 방법.

 

   1) Sign Magnitude: 부호만 MSB로 옮기고, 나머지는 모두 0으로 채웁니다.

 

   2) 1’s complement: 늘어난 길이만큼 부호와 같은 값으로 모두 채웁니다.

  

   3) 2’s complement: 늘어난 길이만큼 부호와 같은 값으로 모두 채웁니다.

 

 

- 2’s complement로 표현된 수를 Decimal Number로 바꿀 때는 2’s complement에 다시 2’s complement를 적용시켜서 양수로 바꾸고 자릿수에 맞는 2의 지수를 곱해 Decimal Number로 바꾸고 -을 붙입니다.

 

- Binary Decimal Operations에서 top carry 2개가 00 or 11 이면 정상적으로 계산된 것이고, 01 or 10 이면 overflow가 발생한 것입니다.

 


 

4. 2. 2진수 부동소수점수의 표현(Representation of Floating Point Number)

 

- Floating Point Number는 부호(Sign), 지수(Exponent), 가수(Mantissa) 3개의 구역으로 나뉩니다. Sign은 수가 양수인지 음수인지, Exponent는 2의 지수를, Mantissa는 소수 이하 부분을 표현합니다.

 

- IEEE 754.

 

- 단일정밀도(Single Precision): 32bit(sign 1bit, exponent 8bit, mantissa 23bit), bias: 127.

 

- 2배정밀도(Double Precision): 64bit(sign 1bit, exponent 11bit, mantissa 52bit), bias: 1023.

 

 

- 계산된 exponent에 bias를 더해서 저장합니다. bias를 더하는 이유는 exponent가 양수이든 음수이든 항상 양수 값으로 저장하기 위해서입니다.

 

- 값을 저장하기전 1.01011 X 25 처럼 수를 정규화 한 뒤 값을 저장합니다.

 

  위 수는 single precision일 때, sign에 0을, exponent에 132를, mantissa에 01011000… 을 저장합니다.

2진수를 정규화하면 항상 1.xxx 형태가 되므로 mantissa에 1. 은 생략하여 저장합니다.

 

 

- underflow 발생 시 0으로 표현하고, 0은 exponent와 mantissa를 모두 0으로 표시합니다. 부호비트는 +0, -0이든 비교연산에서는 같은 것으로 생각합니다.

 

- 을 표현할때는, exponent는 모두 1, mantissa는 모두 0이며 부호비트로 +, -∞을 구별합니다.

 

- NaN(Not a Number)는 실제로 표현하지 못하는 수로, exponent는 모두 1, mantissa는 모두 0이 아닌 경우입니다.


Comments