서론
실수는 이진법으로 바꾸기만 하면 되는 정수와 달리 방법이 복잡하다. 실수는 어떻게 저장될까?
IEEE 754
실수는 제한된 크기에 효율적으로 표현하기 위해 IEEE 754 표준을 따른다.
이 표준은 부동소수점을 이용해 실수를 표현한다.
부동소수점 (Floating point)
부동소수점에 대해 확실히 알기 위해 먼저 대비되는 고정소수점에 대해 알아보자.
고정소수점이란, 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고 숫자를 표현하는 방식이다.
예를 들어
10.5를 1010.1로 바꿔 저장하는 것이다. 이때 소수부는 왼쪽부터 채워나간다.
부호는 0이면 양수, 1이면 음수이다.

장점은 입력이 매우 간단하다는 것이 있다.
단점은 부동소수점에 비해 입력할 수 있는 숫자의 범위가 작고 정밀하지 못하다는 것이다.
따라서 고정소수점보다 부동소수점을 많이 이용한다.
부동소수점은 10진수를 정규화한 후에 저장하는 방식이다.
정규화란, 소수점 앞에 0이 아닌 한 자리만을 남겨 지수 형태로 바꾸는 것으로
1000000.0은 소수점 앞에 한 자리만 남기면 1.0 * 10^6이며, 이는 다시 1.0e6이라고 적는다. e는 밑수 10을 의미한다.
10.5는 1.05 * 10, 1.05e1이다.
10.5는 2진수로 1010.1이므로 이를 정규화하면 1.0101 * 2^3이다.
저장할 땐 정해진 비트에 맞게 입력을 하는데, 4byte 크기의 경우엔 아래 그림과 같다.

10.5를 2진수 정규화한 1.0101 * 2^3을 예로 들어보자.
부호 비트는 양수이므로 0이다.
지수 비트에는 3 제곱이므로 00000011이 들어갈 것 같지만 그렇지 않다.
위와 같이 들어간다면 지수가 음수일 때는 입력할 수 없다.
예를 들어 0.0001은 0.1 * 2^-3인데, 이때 -3을 입력할 수 없는 것이다.
우리는 이 상황을 해결하기 위해 Bias 값을 더한다.
Bias란 지수 비트에 음수를 입력하기 위한 것으로 4byte 크기의 경우엔 127이라는 값을 가지고 있다.
(지수 비트가 8bit이므로)
127이라는 값을 기준으로 높은 숫자면 양수, 낮은 숫자면 음수인 지수를 가지고 있다고 판단하는 것이다.
따라서 지수 비트엔 3 + 127인 130이 입력되어야 하며, 결과는 10000010이다.
마지막으로 가수 비트엔 유효숫자를 입력하면 되는데, 정규화를 하였기 때문에 무조건 앞의 숫자는 1이므로 그 숫자를 제외한 숫자만 입력한다.
1.0101 * 2^3의 유효숫자인 10101에서 1을 제외하고 0101만 입력하는 것이다. 이때 1을 hidden bit라고 한다.
따라서 가수 비트엔 왼쪽부터 0101이 들어간다.
실수 10.5의 저장 결과는 아래와 같다.

결론
실수는
- 정규화를 한 값을 이용한다.
- 부동소수점을 사용한다.
-- 부호 비트의 값에 따라 양수, 음수가 나눠진다.
-- 지수 비트는 bias + 지수값으로 정해진다.
-- 가수 비트는 hidden bit를 제외하고 왼쪽에서부터 값이 채워진다.
실수의 저장 형태가 정수의 형태와 크게 다르지 않을 것이라고 생각했다.
하지만 막상 공부해보니 많이 달라서 당황했다. 그래도 새로운 개념을 알게 되었다.
'컴퓨터 구조' 카테고리의 다른 글
| 컴퓨터구조 - 문자 저장 (0) | 2021.03.18 |
|---|---|
| 컴퓨터구조 - 정수 저장 (0) | 2021.03.17 |