-
[컴퓨터 구조] 고정소수점 VS 부동소수점Computer Science/Computer Architecture 2023. 1. 17. 00:07반응형
들어가기 전 : 이진기수법
컴퓨터는 0과 1로 이루어진 기계어를 사용
➡️ 이진기수법은 2가 나올 차례가 되면 2를 쓰는 대신 자릿수를 늘려주는 방식[ 정수부 ]
정수부에서는 10진수를 2로 나눠가면서 1이나 0을 뽑아냄
- 10진수 4 : 2진수 100
- 10진수 8 : 2진수 1000- 10진수 16 : 2진수 10000
[ 소수부 ]
소수부는 10진수에 2를 곱해가며 1이나 0을 뽑아냄
※ 0.625의 변환 과정
- 0.625 * 2 = 1.25 ➡️ 1 (나머지 0.25)- 0.25 * 2 = 0.5 ➡️ 0 (나머지 0.5)
- 0.5 * 2 = 1.0 ➡️ 1 (나머지 0)
➡️ 최종 0.101
고정소수점 방식 (Fixed Point)
- 소수점이 찍힐 위치를 미리 정해놓고 소수를 표현하는 방식 (정수 + 소수)
- 이진기수법으로 변환한 결과를 그대로 넣는 방식- 16비트 체계를 쓴다고 했을 때, ① 부호 비트(Sign Bit) ②정수부 ③소수부로 구분
- 소수점의 위치를 미리 정해놓고, 앞에서부터 채우며 남는 뒷자리는 0으로 채움
- 7.625 라는 실수를 표현할 경우, 아래와 같이 표현됨- 장점: 실수를 정수부와 소수부로 표현하여 단순
- 단점: 소수부의 자릿수가 작아 표현 범위가 너무 적고 정밀도가 낮아 실수를 다루는 범용 시스템에서는 활용도가 낮음부동소수점 방식 (Floating Point)
- 부동소수점은 2진수로 변환한 결과를 정규화하는 과정을 거침
- 2진수의 정규화는 2진수를 1.xxxx... * 2^n 꼴로 변환하는 것을 의미 ➡️ 소수점을 이동시킨다 하여 floating point
[ 변환 방법 ]
① 2진수의 정수부에 1만 남을 때까지 소수점을 왼쪽(정수부가 0일 경우, 오른쪽)으로 이동
② 이동한 칸 수만큼 n자리에 집어 넣음(ex. 111.101을 정규화하면 1.11101 * 2^2 가 됨)
[ IEEE 754 부동소수점 표현 ]
- 현재 사용되고 있는 부동소수점 방식은 대부분 IEEE 754 표준을 따르고 있음
- 부동소수점 방식으로 실수를 저장하는데는 32비트, 64비트가 사용되며 32비트 기준으로 아래 그림과 같은 구조를 가짐
- 부호비트: 고정소수점과 마찬가지로 0이면 양수, 1이면 음수를 의미
- 가수부: 정규화 결과 소수점 오른쪽에 있는 숫자들을 왼쪽부터 그대로 삽입. 남는 자리는 0으로 채움.
(*참고: 소수점 왼쪽은 정규화를 하면 무조건 1이기 때문에 별도로 표현하지 않으며, hidden bit라고 표현함)
- 지수부: bias라는 지정된 숫자를 n에 더해 2진수로 넣어야 함.
즉, 위의 예시에서 2 + 127 = 129를 이진수로 바꾼 10000001 이 들어가야 함📍bias를 쓰는 이유
: 지수가 음수가 될 수도 있기 때문
ex. 0.000101이라는 이진수의 경우, 정수부를 1로 만들기 위해 오른쪽으로 소수점을 이동해 1.01 * 2^-4 형태가 됨
➡️ 자리수의 음수값을 표현할 방법이 없음 (부호 비트는 전체 숫자 부호이기 때문에 이와 상관 없음)
✅ 최종적으로 10진수 기준 0~127 구간은 음수, 128~255 구간은 양수를 표현하도록 만듦- 위의 32비트 체계를 32비트 단정도(Single-Precision), 64비트 체계를 64비트 배정도(Double-Precision)이라 부름
➡️ 자바의 실수형 타입인 float, double이 이를 의미.
(부동소수점 방식을 사용하는 기본형이라는 의미로 float, 64비트 배정도를 사용한다는 의미로 double)➡️ double은 64비트 체계에서 지수부가 11비트, 가수부가 52비트로 2^11, 2048개의 수를 표현할 수 있으며
0~1023 구간은 음수, 1024~2047 구간은 양수 지수를 의미하며 bias는 1023이 됨- 장점 : 고정 소수점보다 훨씬 더 많은 범위의 실수를 표현할 수 있음
- 단점 : 10진수를 정확하게 표현할 수 없어 계산 결과는 항상 근사치임
반응형'Computer Science > Computer Architecture' 카테고리의 다른 글
[컴퓨터 구조] CPU의 구조 및 CPU VS GPU (0) 2023.01.24 [컴퓨터 구조] 컴퓨터 하드웨어 기본 구조 (CPU, 메모리) (0) 2023.01.09