실수를 표현하기 위해 2진 소수점을 표현할 방법이 필요하다. 정수의 경우와 마찬가지로 문맥에 따라 실수를 표현하는 방법이 달라질 수 있다.
이렇게 소수점의 위치가 항상 일정하기 때문에 이런 방식을
고정소수점(fixed-point) 표현법이라고 부른다.
10.01은 10이 정수 부분이고 01은 분수 부분이다.
따라서 정수 부분은 2이며, 분수 부분은 0.25(1/4)이다.
정수 부분은 2진 표현법과 비슷하다.
소수점 오른쪽에 있는 숫자들(분수 부분)은 2진수의 경우 1/2, 1/4 등 2의 거듭제곱을 분모로 사용한다.
하지만 쓸모 있는 범위의 실숫값을 표현하기 위해 필요한 비트 개수가 너무 많기 때문에 범용 컴퓨터(일반적인 문제를 해결하기 위해 만들어진 컴퓨터)에서 이런 방식을 사용하는 경우는 드물다. 일반적인 문제를 해결하려면 더 넓은 범위의 수를 다룰 수 있어야 한다.
예를 들어, 가수(10진 소수점 왼쪽이 한 자리뿐인 소수)에 10을 몇번(지수) 거듭제곱한 값을 곱하는 방식으로 소수를 표현한다. 2진법으로 표기할 때는 10이 아닌 2을 밑으로 한다.
따라서 가수 부분은(소수점 왼쪽이 한 자리뿐인) 2진 소수, 지수 부분은 2의 거듭제곱 횟수를 표현한다.
0.0012 대신 1.2 X 10^-3 이라고 쓰며,
이 값은 1.2 X 0.001이므로 0.0012와 같다.
부동소수점(floating-point) 표현법이라고 부르는 이유가 헷갈릴 수 있다. 단순히 가수 부분의 소수점의 위치가 같아 보이기 때문이다. 하지만 가수가 같다고 해도 지수가 무엇이냐에 따라 소수점 왼쪽 숫자의 자리가 1/10일 수도 있고(1.2 X 10^-1), 1일 수도 있다(1.2 X 10^0)는 점을 생각하면 소수점 위치는 정해져 있지 않다고 말할 수 있다.
반면에 고정소수점은 12.00, 01.20, 00.12와 같이 소수점 왼쪽의 수는 항상 일의 자리이다.(소수점 고정)
부동소수점은 지수의 밑이 2라는 숫자를 비트로 표현할 필요가 없다. 부동소수점 정의상 밑 2는 항상 정해져 있다.
그런데 부동소수점 표현법도 역시 비효율적이다.
IEEE는 미국 전자전기공학회(Institute of Electrical and Electronic Engineers)의 약자로, 표준 제정 등 다양한 활동을 하는 전문가 조직이다.
IEEE 754 형식에는 주로 쓰이는 두 가지 부동소수점 수가 있다. 바로 기본 정밀도(single precision) 부동소수점 수, 2배 정밀도(double precision) 부동소수점 수다. 기본 정밀도는 32비트를 사용하고 2배 정밀도는 64비트를 사용한다. 비트를 2배나 더 많이 사용하기 때문에 비용이 더 들지만 정밀도는 훨씬 크다.
기본 정밀도 부동소수점 수를 단정도 실수,
2배 정밀도 부동소수점 수를 배정도 실수라고 부르기도 한다.
IEEE 754 부동소수점 표현은 크게 세 부분으로 구성된다.
최상위 비트는 부호(sign)로 사용되며, 지수 부분과 가수 부분이 있다.
지수에 대해 부호 비트가 따로 존재하지 않는다. IEEE 754 설계자들은 편향된(biased) 지숫값을 사용해 지수에 대해 부호를 표현한다. 기본 정밀도인 경우 bias 127, 2배 정밀도인 경우는 bias 1023이다. 여기서 127, 1023의 의미가 궁금할 것이다.
단정도 실수(기본 정밀도 부동소수점 수)는 32비트를 사용하며 8비트를 지수 부분으로 사용한다. 따라서 0 ~ 255까지 표현 가능한 지수를 절반에 해당하는 127을 bias로 설정한다. 이 말은 지수에 127을 더해서 양수인 경우는 맨 앞 비트가 1이고 음수인 경우는 맨 앞 비트가 0이 될 것이다.
예를 들어, 지수가 -2라면 127 더하면 125이다. 이걸 8비트로 표현하면 01111101 이다. 맨 앞 비트가 0이 된다(음수). 반대로 지수가 3이라면 127 더하면 130이다. 이걸 8비트로 표현하면 10000010 이다. 맨 앞 비트가 1이 된다(양수).
이해가 됐으면 좋겠다..