반응형
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 |
댓글