본문 바로가기
컴퓨터

부동소수점 변수 포맷 (IEEE 754-1985)

by Begi 2018. 2. 18.
반응형

IEEE 754-1985에 정의한 부동수수점(Floating Point Number) 포맷은 다음과 같다.

 

 

Single Precision(단정밀도)은 32비트로 나타내고 Double Precision(배정밀도)은 64비트로 나타내어 더 정밀한 표현을 할 수 있다.

 

Fraction은 소수점이하 숫자를 나타내고 Exponent는 지수를 나타낸다.

 

부동소수점 수는 다음 식과 같이 계산한다.

 

0.001011 (2진수) = 1.011 (2진수) × 2-3

여기에서 Fraction은 011이다. 그리고, Exponent는 -3이지만 IEEE 754 single precision에서는 여기에 127을 더해줘야 한다. 그래서, 실제 저장 되는 Exponent는 124가 된다. Double precision에서는 1023을 더해야 한다.
 
0.001011 (2진수)을 10진수로 다음과 같이 변환한다.
0.001011 (2진수) =  (0 × 2-1) + (0 × 2-2 ) + (1 × 2-3 ) + (0 × 2-4 ) + (1 × 2-5 ) + (1 × 2-6)  = 0.171875 (10진수) 

 

Exponent의 모든 비트가 1이고 Fraction의 모든 비트가 0일 때는 무한대를 나타내고 Sign 비트에 따라 플러스 무한대 또는 마이너스 무한대를 나타낸다.

 

Exponent의 모든 비트가 1이고 Fraction 중 하나라도 1인 bit가 있을 때는 NaN (Not a Number)이다. NaN은 0으로 나누거나 sqrt(-1)과 같이 결과 값이 숫자가 아닐 때 사용된다.

 

 10진수 IEEE 754 (Single precision)
0 0   00000000   00000000000000000000000
0.1  0   01111011   10011001100110011001101
1 0   01111111   00000000000000000000000
10 0   10000010   01000000000000000000000
100 0   10000101   10010000000000000000000
256 0   10000111   00000000000000000000000
-0.1 1   01111011   10011001100110011001101
-1 1   01111111   00000000000000000000000
-10 1   10000010   01000000000000000000000
-100 1   10000101   10010000000000000000000
-256 1   10000111   00000000000000000000000
+  1   11111111   00000000000000000000000 
-  0   11111111   00000000000000000000000 
NaN  x   11111111   00000000000000000000001 
 x   11111111   11111111111111111111111 

 

C 언어에서 보통 float 선언문은 Single Precision이고 double 선언문은 Double Precision이다.

 

부동소수점 컨버터 : https://www.h-schmidt.net/FloatConverter/IEEE754.html

 

반응형

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

오픈 소스가 존재하는 이유  (0) 2018.03.24
스트리밍 프로토콜 RTSP, RTP, RTCP  (0) 2018.03.13
동영상 플레이어 VLC  (0) 2018.03.13
가상화폐  (0) 2018.01.19
식사하는 철학자 문제  (0) 2018.01.05

댓글