Lecture 04: Floating Point
Computer Systems: A Programmer's Perspective (CS:APP)
Fractional Binary Numbers
앞서
여기서
이때
Examples
Value | Representation |
---|---|
Limitations
형태로 표현할 수 없는 유리수는 순환소수 형태로 나타난다.Value Representation 전체 비트를 정수부와 실수부로 나누어 사용하기에 표현할 수 있는 수의 범위가 매우 좁다.
IEEE Floating Point
과거에는 기계마다 부동 소수점을 표현하는 방식이 달라 프로그램을 다른 기계로 옮기면 어떤 일이 일어날지 예측할 수 없었다. 이러한 혼란을 막고자 1985년 IEEE에서 부동 소수점에 대한 기술 표준(IEEE 754)을 공표하였고, 이는 오늘날까지 널리 통용되고 있다.
Floating Point Representation
부동 소수점은 실수를 과학적 표기법처럼 나타낸다.
는 부호 비트, 은 가수, 는 지수이다.- 가수
은 를 만족하는 분수 값이다.
Precision Options
IEEE 754는 수의 정밀도에 따라 32비트의 단정밀도(Single precision), 64비트의 배정밀도(Double precision) 등으로 형식을 정의하고 있다. 각 정밀도 형식은 다음과 같이 구성된다. (단위: 비트)
Precision | Sign | Exponent | Mantissa |
---|---|---|---|
단정밀도 | 1 | 8 | 23 |
배정밀도 | 1 | 11 | 52 |
Normalized Values
실수는 정규화 과정을 거쳐 부동 소수점 형식으로 인코딩된다. 부동 소수점의 지수부를
지수부가
Precision | |||
---|---|---|---|
단정밀도 | 127 | -126 ~ 127 | 1 ~ 254 |
배정밀도 | 1023 | -1022 ~ 1023 | 1 ~ 2046 |
가수의 경우,
Min | ||
Max |
가수부가
Normalized Encoding Example
float F = 15213.0
을 부동 소수점 방식으로 표현해 보자.
따라서
정리하면 다음과 같다.
즉, 15213.0
은
Denormalized Values
부동 소수점 형식에는 특수하게 처리되는 값들이 존재한다.
이는 0에 가까운 매우 작은 수들을 표현하기 위해 사용된다.
Special Values
- 모든 비트가 0인 경우, 이는 0을 나타낸다. 부호 비트에 따라 +0과 -0을 구분할 수 있다.
이고 인 경우, 를 나타낸다. 부호 비트에 따라 와 를 구분할 수 있다. 이고 인 경우, NaN(Not a Number)을 나타낸다. 음수의 제곱근 등 표현식의 결과를 실수로 나타낼 수 없을 때 사용된다.
Floating Point Puzzles
1
2
3
int x = ...;
float f = ...;
double d = ...;
다음 명제의 참/거짓을 판단해 보자.
명제 | 판단 |
---|---|
x == (int)(float)x | 거짓 |
x == (int)(double)x | 참 |
f == (float)(double)f | 참 |
d == (double)(float)d | 거짓 |
f == -(-f) | 참 |
2 / 3 == 2 / 3.0 | 거짓 |
d < 0.0 (d * 2) < 0.0 | 참 |
d > f -f > -d | 참 |
d * d >= 0.0 | 참 |
(d + f) - d == f | 거짓 |