프로그래밍

[프로그래밍] IEEE 754 부동 소수점 예제 및 유효자리 계산

포도알77 2019. 5. 6. 09:00

IEEE754는 부동소수점을 표현하는 표준으로, 일반적으로 사용하는 C, C++, Java와 같은 프로그래밍 언어의 대부분이 이를 사용한다. 

 부동 소수점외에도 우리에겐 익숙하지 않은 고정 소수점 표현 방식도 있는데, 이는 특정 자릿수에 소수점이 있다고 가정하고 이를 정수로 표현하는 방식이다. 예를 들어 10^3 위치에 소수점이 있다고 생각한다면 12000과 120을 나타내는 고정 소수점은 각각 12.000과 0.120을 뜻하게 된다.

 반면 부동소수점은 이 소수점의 위치를 고정하지 않고 지수부와 가수부의 값에 의하여 변동되므로, 더 큰 값이나 세밀한 값을 표현할 수 있게된다. 

 

 IEEE754에서는 부동 소수점을 3가지로 구성하는데, 최상위 비트부터 부호비트, 지수비트, 가수비트이다. 32비트 단정도와 64비트 배정도에서는 각각 1/8/23와 1/11/52으로 표현한다. 

 

[예제]

 간단한 예를 들어 부동소수점을 표현해보자. 123.625라는 값을 32비트 단정도로 표현해보자. -123.625는 정수부의 123을 8비트로 표현하여 01111011이며, 가수부 0.625를 0.5+0.125으로 표현할 수 있으므로 0.101이 된다. 이는 01111011.101가 되며 정수부에 한자리만 오도록 조작을 조금 해보면 1.111011101 * 2^6으로 표현할 수 있다.

 이제 부호비트는 음수이므로 1으로 결정되었고, 지수 비트는 2^6에서 6을 127(bias)과 더하여 133인 10000101으로 표현한다. 마지막으로 가수부는 following zero를 0으로 채워 11101110100000000000000을 넣어준다. 

 이와 같은 과정을 거치면 1 / 10000101 / 11101110100000000000000 와 같이 나타나게 된다.

 

[유효자리]

유효자리 계산은 쉽게 할 수 있다. 부동 소수점에서 값은 항상 정규화되어서 표현되기 때문에, 가수부의 정밀도에 따라서 유효자리가 결정된다.

 32비트 단정도에서는 가수비트가 23이며 이는 1/2^23까지 표현할 수 있다. 2^10은 1024으로 10^3이며, 2^23는 대략적으로 8*10^6이다. 따라서 유효자리는 6자리까지라고 할 수 있다.

반대로 64비트 배정도는 52자리로 이를 표현하므로 2^52는 약 4*10^15이며 15자리까지 표현할 수 있다.

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사