CS/Computer Architecture

실수를 표현하는 방법

실수를 표현하는 방법

 

  • 고정 소수점 표현법

    00.00에서 .을 기준으로 오른쪽으로 한 비트 갈 때마다 1/2씩 값을 줄 수 있는 방법이다. 일상에서 사용하는 십진법의 소수점 처리 방식과 거의 동일하다고 볼 수 있겠다. 하지만 이런식으로는 쓸모 있는 범위의 실숫값을 표현하기 위해 필요한 비트의 수가 많아지게 되므로 몇몇 장치를 제외하고 잘 사용하지 않는다고 한다. 예를들어 플랑크 상수라는 수는 6.63*10^(-34)J/s인데 이것을 비트로 표현하면 거의 200비트가 필요하다. 정밀도를 필요로 할 때 비트수가 매우 커지는 문제를 해결하기 위해 부동 소수점 표현법을 고안하게 되었다고 한다.

  • 부동 소수점 표현법(floating point)

    가수부분과 지수부분으로 나누어 가수부x지수^(지수부)의 형태로 값을 표현 할 수 있는 방법이다. 컴퓨터의 경우 이진법이므로 예를들어 4비트 부동소수점 표현을 할때 가수부와 지수부 각 2비트라는 예시를 들어보면 다음과 같다.
    0.000 > 0.0 (가수부) | 00(지수부) 이런식으로 만약 1.010이라면 지수부인 1.0에 지수부10이고 이것을 십진법으로 계산해보면 1.0*2^(2) = 4 가 되는 식이다. 그런데 이런 식으로 할 경우 특정 수, 예를들어 0을 표현하는 방법이 0.0+bb 의 식으로 여러가지가 된다. 또한 6.5 처럼 특정한 수를 표현하지 못하는 경우가 발생한다. 이런 문제를 최대한 줄이고자 현재는 IEEE 754-1985 표준을 사용하고 있다.


IEEE 754 표준


설명으로 하기보다 예시를 통해 이해하는 쪽이 쉽다고 생각했다. 

지수(exponent), 가수(fraction)


 위키백과에 나온 예시이다. 이 부분에서 정규화를 한 이유는 무조건 최상위 비트가 1이 되므로, 1비트를 줄일수 있게 되므로 가수부쪽에서 1비트를 더 사용하여 정밀도를 높게 할수 있기때문이라고 한다.

    bias?
지수부의 
모든 비트가 1일 때(11111111)는 INF을 표현하도록 예약되어 있다.
 8비트 중에서 실제로 사용할 수 있는 범위는 1~254로 총 254개인데 이를 양수/음수로 반반씩 나눠서 쓰기 위해 127을 빼서 -126부터 127까지의 범위를 사용할 수 있도록 한다. 따라서 저장할 때는 해당 지수에 127을 더하는데 이것을 bias라고 한다.