인간은 infinity를 상상할 수 있지만 기계는 할 수 없다 by Jeong Yeop Paek....
기계는 항상 공간이 한정되어 있기 때문에 절삭이 불가피하다.
(float가 float인 이유 : 소수점이 움직이는 게 마치 흐르는 것처럼 보여서 float라고 한다 (...))
Floating Point
- 정수가 아닌 숫자를 표현하는 것 (아주 크거나, 아주 작은 수도 포함)
<Scientific notation>
- normalized : 소수점 앞에 0이 아닌 숫자가 하나만 나오는 것
- not normalized : else normalized...
- In binary : +- 1.xxxxxxx X 2^yyyy (non-zero 값이 1 하나밖에 없음)
Floating Point Standard
- IEEE Std 754-1985로 정의된다.
<Two Representation>
- Single precision (32-bit) : float in C
- Double precision (64-bit) : double in C (이게 double 이 double인 이유)
IEEE Floating Point Format
- S : sign bit 자리. 0이면 양수, 1이면 음수
- Exponent : 지수가 오는 자리 (yyyy). (Single은 0 ~ 255, Double은 0 ~ 2047까지 가능)
- actual exponent = Exponent - Bias (single은 -127 ~ 128, Double은 -1021 ~ 1024까지 가능)
* all zeros / all ones reserved for special cases (아직 무슨 소린지 모르겠다)
- Fraction : 소수점 뒤 부분. Fraction의 가장 작은 값은 0, 가장 큰 값은 1에 가까우므로 Fraction의 범위는 0 <= Fraction < 1이다. 1 + Fraction인 절댓값 significand의 범위는 1.0 <= |significand| < 2.0이다.
* 이때의 1은 암묵적으로 포함되므로 쓰지 않아도 무방하다.