컴퓨터에서의 실수 표현
컴퓨터는 메모리에 0과 1을 이용한 2진수로 정보를 저장한다. 정수의 경우 단순히 2진수로 정확히 표현할 수 있지만, 실수는 그렇지 않다. 컴퓨터에서 실수를 표현하기 위해 메모리에 어떻게 저장하며, 그에 대한 두 가지 방법 부동 소수점과 고정 소수점을 살펴보도록하자.
부동 소수점
IEEE 754 32bits
부동 소수점에 대한 표준
부동 소수점에 대한 표준은 IEEE 754로 정의되어있다. 총 32비트 (4바이트)의 저장 공간에 실수를 저장하며, C/C++의 float형이 이를 따른다. 실제로 저장되는 값은 다음과 같다.
$$
mantissa * 2^{exponent - 127}
$$
- 부호 비트 (sign bit, 1bit)
- 실수의 부호를 결정하는 비트이다. 정수에서와 마찬가지로 0일 경우 양수, 1일 경우 음수로 저장한다.
- sign bit 가 1인 경우 나머지 값들은 정수와 마찬가지로 2의 보수로 저장한다.
- 지수 비트 (exponent bit, 8bit)
- 지수 비트는 2의 지수에 해당하는 부분을 저장한다. 이 때 유의할 것은 실제로 저장되는 값은 0~255의 값이며 실제로 사용할 때는
exponent - 127
값을 활용하게 된다.
- 가수 비트 (mantissa bit, 23bit)
- 가수 비트는 실수를 표현하기 위해 생성된 정규화된 2진수를 저장하는 부분이다.
- 가수 비트를 이해하기 위해서는 실제로 부동 소수점이 어떻게 비트로 표현되는 지 이해해야한다.
실수를 부동 소수점으로 표현하기
- 부동 소수점을 만들기 위해서는 우선, 정수부와 소수부를 나누어 2진수로 표현해야한다. 양수인 실수 3.14와 음수인 실수 -3.14를 예시로 살펴보자.
- 정수부를 2진수로 표현하기
- 3
- 3의 경우 2진수로 표현하면
11
이다. 이를 기록하자.
- 소수부를 2진수로 표현하기
소수부의 경우 정수와 달리 정확도의 문제가 있다. 이는 컴퓨터가 2진수로 소수부를 표현하기 위해 2^n
의 합으로 해당 소수를 나타내기 때문이다.
- 0.14
- 0.14를 표현하기 위해서 0.14와 가장 근접한
2^n
의 합을 구해야한다.
00011110101110000101001
이 이에 해당한다.
1/2 * 0 + 1/2^2 * 0 + 1/2^3 *0 + 1/2^4 *1
…. 과 같은 방식으로 계산된다.
- 1.xxxx 형태의 가수, 지수 표현하기