이진수로 실수를 표현하는 방법은 고정 소수점과 부동 소수점 두 방법이 있다.

이진수로 실수를 표현하는 방법

먼저 2진수로 실수를 표현하는 방법을 정리해보자.

실수는 크게 정수부분와 소수부분으로 나뉜다.

정수부분은 수에 2를 나눈 결과의 나머지(0 또는 1)를 가지고 표현하지만 소수부분은 2를 곱한 결과의 정수부(0 또는 1)을 가지고 표현한다.

예를들어, 11.625를 이진법으로 변환해보자.

  1. 정수 11을 이진수로 변환한다.

    11 % 2 –> 5 나머지 1

    5 % 2 –> 2 나머지 1

    2 % 2 –> 1 나머지 0

    11의 이진수 변환 결과는 1011이다.

  2. 실수 0.625를 이진수로 변환한다.

    0.625 * 2 = 1.25 –> 1

    0.25 * 2 = 0.5 –> 0

    0.5 * 2 = 1 –> 1

    0.625의 이진수 변환 결과는 101이다.

  3. 따라서 11.625의 이진수 변환 결과는 1011.101이다.

고정 소수점

고정 소수점(Fixed Point)은 고정된 길이로 나눠진 정수부, 실수부에 2진수로 변환된 소수를 그대로 삽입하여 표현하는 방법이다.

fixed-point

예를들어 정수 11.625를 고정 소수점에 표현한다면 부호비트는 0, 정수 비트에는 0…01011, 소수 비트에는 10100…0이 들어갈것이다.

정수부가 사용하는 비트의 길이만큼 실수부가 사용할 수 있는 비트의 개수가 줄어들기 때문에 정밀도가 떨어진다.

부동 소수점

부동 소수점(Floating Point)의 부동은 부동(不動, 움직이지 않음)이 아닌 부동(浮動, 떠서 움직임)이다.

소수점의 위치를 변화하고 지수를 기록하여 실수를 효율적으로 저장하기 위한 방법이다.

floating-point

부동 소수점은 소수를 정수 / 소수로 나누지 않고 지수 / 가수로 나뉜다.

소수점의 위치를 변화한 정도, 가수는 실제 수에 대한 정보가 들어있다.

예를들어 정수 11.625를 부동 소수점에 표현하기 위해서는 2진수 1011.101으로 변환 이후에 추가로

  1. 소수점을 왼쪽으로 이동시켜 1이 하나만 남도록 한다.

    1011.101 –> 1.011101*2^3

  2. 지수부는 3이 되는데, Bias 127을 더하여 130이 되고 이를 2진법으로 변환한다.

    Bias를 더하는 이유는 지수부가 음수가 되는것을 방지하기 위해서이다.

    3 –> 3 + 127 –> 130 –> 10000010 (지수부)

  3. 가수부는 소수점 이하인 0.11101이다.

    소수점을 왼쪽으로 이동시킨 결과에서 가장 왼쪽의 1은 포함시키지 않는다. 이 1을 hidden bit라고 부른다.

  4. 32비트의 경우 부호비트(1) + 지수부(8) + 가수부(23)으로 표현하므로

    0 + 10000010 + 111010000000000000000이 11.625를 부동 소수점으로 표현한 결과이다.