IEEE 754 부동소수점(floating Point)

sundays·2022년 8월 21일
0

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
}

Reference

profile
develop life

0개의 댓글