고정소수점과 부동소수점
컴퓨터에서 실수를 표현하는 방법으로 고정소수점 표현법과 부동소수점 표현법이 있다.
고정소수점
- 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해놓고, 해당 비트만큼만 사용해서 숫자를 표현하는 방식이다.
- 정수부와 소수부의 자릿수가 크지 않으므로, 표현할 수 있는 범위가 매우 적다는 단점이 있다.
부동소수점
- 실수를 표현할 때 소수점의 위치를 고정하지 않고 과학적 표기법을 통해 그 위치를 나타내는 수를 따로 적는 방식이다.
- 부동소수점에서 부동은 움직이지 않는다는 뜻의 不動이 아니라, 오히려 그 반대의 의미로 소수점이 떠다니며 움직인다는 의미의 부동 (浮動)이다.
- 일반적으로 IEEE 754 표준방식을 따른다.
IEEE
- IEEE는 미국 전자전기공학회(Institute of Electrical and Electronics Engineers, IEEE)의 약자로 표준 제정 등 다양한 활동을 하는 전문가 조직이다.
- IEEE는 발음하기 살짝 어려운 측면이 있어 일반적으로 'I-triple-E(아이 트리플 이)'라고 발음한다.
IEEE 754 표준
- IEEE 754 표준은 부동소수점을 저장하고 처리하는 방법을 표준화하여 컴퓨터에서 부동소수점을 사용할 때 일관성을 보장하기 위해 필요하며 가장 널리 쓰이는 표준이다.
- 실수 표기 방식, 실수 연산에 관한 규정, 오버플로우/언더플로우의 처리, 반올림에 관한 규정 등을 정의하는 표준이다.
- IEEE 754 표준에는 32비트(float - 단밀도, 필수구현) 형식 뿐 아니라 64비트(double - 배밀도) 등 타 형식들도 정의되어 있다.
- IEEE 754라는 표준은 부동소수점 표현법의 비효율성을 해결하기 위해 다음과 같은 트릭을 사용한다.
- 정규화를 통해 가수를 조정해서 맨 앞에 0이 없게 만든다.
- 가수의 맨 왼쪽 비트가 1이라는 사실을 알고 있으므로 이를 생략하여 가수에 1비트를 더 사용할 수 있다.
- 초기에는 부동소수점을 표현하기 위하여 컴퓨터마다 여러 가지 서로 다른 형식을 사용하였으나, 현재는 거의 대부분의 컴퓨터들이 호환성을 위해 IEEE 754 표준을 사용하고 있다.
형식

- 부동 소수점은 부호부, 지수부, 가수부로 나뉜다.
- 부호부 (Sign) : 1비트. 숫자의 부호를 나타내며, 양수일 때 0, 음수일 때1이 됩니다.
- 지수부 (Exponent) : 단정도의 경우 8비트, 배정도의 경우 11비트. 지수를 나타냅니다.
- 가수부 (Mantissa, fraction, significant) : 단정도의 경우 23비트, 배정도의 경우 52비트. 가수 또는 유효숫자를 나타냅니다.
- 32비트 단정도(single)가 기본이며, 비트 수를 두 배확장했다고 해서 64비트 배정도(double) 방식도 있다.
- 단정도 (단 정밀도) : (부호부 1 비트, 지수부 8 비트, 가수부 23비트)
- 배정도 (배 정밀도) : (부호부 1 비트, 지수부 11 비트, 가수부 52 비트)
- 배정도를 사용하면 가수 부분의 자리수가 많으므로, 반올림 오차 등을 줄일 수 있으나, 단 정밀도에 비해 2배 이상의 메모리 및 계산시간이 필요함
방법
- 부호 부분은 양수일 경우 0, 음수일 경우 1로 표현한다.
- 절댓값을 이진법으로 나타낸다.
- 소수점을 왼쪽으로 이동시켜(정규화), 왼쪽에는 1만 남게 만든다(과학적 표기법).
- 가수 부분은 소수점의 오른쪽 부분이다. 가수부분 나머지 비트 수를 0으로 채운다.
- 지수 부분은 지수승에 Bias를 더하고 2진수로 표현한다.
- 부호비트, 지수부, 가수부를 합친다.
15.25를 부동소수점 방식으로 변환
1. 부호부 0
2. 1111.01
3. 1.11101(가수부) * 2^3(지수부)
4. 11101000000000000000000
5. 127 + 3 = 130 -> 10000010
6. 0(부호비트)10000010(지수부)11101000000000000000000(가수부) = 0100 0001 0111 0100 0000 0000 0000 0000
- Bias는 편향값으로 지수가 음수가 되는 경우를 방지하기 위해서 사용한다. 즉 지수와 양수, 음수를 나타내기 위한 방법이다.
- Bias는 32비트에서는 127, 64비트에서는 1023