실수를 표현하는 방식으로 꽤 많은 종류의 형태가 제안되었지만, 현재까지 가장 많이 사용하는 방식은 IEEE 표준 754 부동 소수점 표현이다.
십진수 표기법
이진수 표기법 (비트)
이진수 표기법의 한계
0.2 같은 경우에는 이진수 표기법으로 정확하게 표기가 불가능하다.
매우 큰 수를 표현하기에 부적합하다 : 예를 들어 5 * 2^100은 101000000000…. (0이 100개 필요)
IEEE 부동소수점
S는 숫자가 음수인지 양수인지 결정, 해당 비트는 MSB(Most Significant Bit) 처리
M은 분수 이진수 (가수부)
E는 2의 거듭제곱인 가중치
단정밀도 (float) : 앞 8비트 = 지수, 뒤 23비트 = 분수
배정밀도 (double) : 앞 11비트 = 지수, 뒤 52비트 = 분수
지수의 범위는 단정밀도의 경우 -126 ~ +127, 배정밀도의 경우 -1022 ~ +1023가 됨
Bias
(n은 지수의 비트 개수)
64비트: 지수 11비트, 2^10 = 1024, 1024 - 1 = 1023
32비트: 지수 8비트, 2^7=128, 128 - 1 = 127
지수부의 변형
정규화된 값 : 지수의 비트가 모두 0도 아니고 1도 아닐 때,지수 = 지수 - Bias
비정규화된 값 : 지수의 비트가 모두 0인 경우, 지수 = 1 - Bias
기능 1 - 정규화된 숫자를 사용하면 항상 M이 1 이상이어야 하므로 0을 나타낼 수 없기 때문에 숫자 값 0을 나타낼 수 있는 방법을 제공 - 실제로 +0.0의 부동 소수점 표현은 부호 비트가 0이고 지수 필드가 모두 0(비정규화된 값을 나타냄)인 등 모두 0으로 이루어진 비트 패턴을 가짐
기능 2 0.0에 매우 가까운 숫자를 표현하는 것. 가능한 숫자 값이 0.0에 가깝게 균등하게 배치되는 점진적 언더플로라는 속성을 제공
특별한 값 : 지수 비트가 모두 1인 경우
분수 비트가 모두 0인 경우 infinity (부호에 따라 +-) : 두 개의 매우 큰 숫자를 곱하거나, 0으로 나눌 때 등 넘쳐나는 값을 표현할 때 사용
분수 비트가 모두 0이 아닌 경우 NaN (Not a Number) : 이러한 값은 √-1 또는 ∞-∞를 계산할 때처럼 결과를 실수 또는 무한대로 제공할 수 없을 때 사용