IEEE 754의 부동소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.
−118.625(십진법)를 IEEE 754(32비트 단정밀도)로 표현해 보자.
음수이므로, 부호부는 1이 된다.
그 다음, 절댓값을 이진법으로 나타내면 1110110.101(2)이 된다.
소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101(2)=1.110110101(2)×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000 이 된다.
지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101(2)이 된다.
이 결과를 정리해서 표시하면 다음과 같다.
// 공간 제약에 따른 부동 소수점 연산의 단점
fun main() {
var num: Double = 0.1
for (x in 0..999) {
num += 0.1
}
println("num : $num") // 100.09999999999859
}