프로그래밍 이야기

부동소수점 표현과 부동소수점 연산

원소랑 2020. 3. 21. 17:38

 

© geralt, 출처 Pixabay

 

숫자, 특히 부동소수점과 연산에 대한 내용 정리.

부동소수점

기본 용어

실수 = Real Number

= 유리수 + 무리수

유리수 = Rational Number

정수의 비로 표현 가능한 숫자.

무리수 = Irrational Number

정수비로 나타낼 수 없는 숫자.

Ex) 3.141592653589793..., √2

부동소수점 표현 bit 구성

최상위 비트(MSB, Most Significant Bit) = 수의 부호(Sign)

지수부(exponent, ) = 2의 거듭제곱을 표시하는 부분

가수부(mantissa, 假數部) = 상용로그의 값에서 0과 같거나 0보다 크고 1보다 작은 소수

예) 십진수 -118.625 를 IEEE 754 표준으로 표현하면

풀이과정

1) -118.625 의 절대값을 2진수로

118.625 = 1110110.101

118을 2진수로 = 1110110

0.625를 2진수로 = 0.101

2)소수점을 왼쪽으로 이동, 1만 남긴다.

1110110.101 = 1.110110101×2⁶

부동소수점 수를 정규화

= 가수부와 지수부를 분리한다.

(정규화되면 소수점 왼쪽 수는 무조건 항상 1, 신경X 표현X hidden bit라고 부름)

3)소수점 오른쪽을 23비트가 되도록 0으로 채움

1.110110101×2⁶

=> 1101 1010 1000 0000 0000 000 (가수부)

4)IEEE 표준에서 32비트의 Bias 는 127

Bias 127 의 2진수는 0111 1111

Bias 127 에 소수점의 지수6(2⁶)을 더한다.

= 133

133을 2진수로 변환하면

= 1000 0101 (지수부 8비트)

5)부호 1비트, 지수 8비트, 가수 23비트를 합친다.

= 1_100 0010 1_110 1101 0100 0000 0000 0000

= -118.625

단정밀도(single precision)

float

실수를 32비트로 처리

부호 1비트, 지수부 8비트, 가수부 23비트

배정밀도(double precision)

double

실수를 64비트로 처리

부호 1비트, 지수부 11비트, 가수부 52비트

Float Type

지수부 8비트로 Bias127 제외하고 128비트 큰 숫자까지 담을 수 있지만,

가수부가 23비트 자리수로 제한돼있기 때문에 정밀도는 굉장히 떨어질 수 있다.

16,777,216 까지의 정수부 정밀도를 지원함.

지수부 bit 자리수가 넘쳐 정규화된 hidden bit 1 까지 포함해서 정밀도를 보장하는 최대 수.

또, 가수부 자리를 모두 써버렸기 때문에 16,777,216.1234 처럼 뒤에 붙은 0.1234 역시 할당을 시도해도 메모리에 담아내지 못함.

대신 배정밀도(double precision) 타입을 사용하면, 가수부 비트 수가 더 많기 때문에 정밀도를 보장하는 최대 수가 더 높음.

 

참고 자료

IEEE 754, 부동소수점 표현 표준

IEEE = Institute of Electrical and Electronics Engineers(전기 전자 기술자 협회)

https://ko.wikipedia.org/wiki/IEEE_754

부동소수점 연산

https://en.wikipedia.org/wiki/Floating-point_arithmetic

실수 자료형의 오차

https://dojang.io/mod/page/view.php?id=738

컴퓨터에서의 실수 표현

https://gsmesie692.tistory.com/94

 

https://en.wikipedia.org/wiki/Single-precision_floating-point_format

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

 

추천서적

https://coupa.ng/bu1kTX

 

C 언어 코딩 도장 : 따라하기 연습하기 심사하기로 배우는 C언어 프로그래밍

COUPANG

www.coupang.com

*파트너스 활동을 통해 수수료를 제공받을 수 있음

 

 

 

728x90
반응형