본문 바로가기
Computer Science/컴퓨터구조

부동 소수점과 고정 소수점

by eeeun:) 2021. 12. 29.
반응형

이진 기수법

10진수에서는 10^n에 해당하는 수가 될 때마다 자릿수가 올라감

2진수에서는 2^n에 해당하는 수가 될 때마다 자릿수가 올라감

10진수 2진수
2 10
4 100
8 1000
9 1001

 

10진수를 2진수로 바꾸는 방법(정수)

10진수가 1이 될 때까지 계속 2로 나눠가면서 나머지를 구하고, 밑에서부터 거꾸로 읽으면 된다

 

| ✍️ 35를 이진수로 변환하는 예시

35 / 2 = 17 ... 1
17 / 2 = 8 ... 1
8 / 2 = 4 ... 0
4 / 2 = 2 ... 0
2 / 2 = 1 ... 0
1

1이 나왔으니 밑에서부터 읽어주면 35(10) = 100011(2)

 

10진수를 2진수로 바꾸는 방법(실수)

정수부는 그냥 정수 변환하는 거랑 똑같이 하면 된다.

소수부가 문제인데, 소수점 뒤에 있는 숫자들을 하나씩 2진수로 바꿔버리면 되지 않냐고 생각할 수도 있지만

아래 예시처럼 로 다른 10진수 숫자가 2진수로 변환되었을 때 중복이 되는 문제가 생김!

1.9 1.1001
1.41 1.100 1

 

실수부는 정수부 변환의 정반대로 하면 된다

소수부는 10진수에 2를 곱해가면서 1이나 0을 뽑아낸다

그리고 정수부 변환할 때는 1이 나오면 종료했다면 여기서는 0이 나오면 종료하고, 결과를 밑에서부터가 아니라 위에서부터 읽어준다

 

| ✍️ 0.625를 이진수로 변환하는 예시

0.625 * 2 = 1.25 = 1 + 0.25 -> 1
0.25 * 2 = 0.5 = 0 + 0.5    -> 0
0.5 * 2 = 1.0 = 1 + 0       -> 1

나머지 0이 나왔으니 빼낸 숫자들을 위에서부터 읽어주면 0.625(10) = 0.101(2)

 

부동 소수점(floating point)

floating potin : 소수점(point)이 둥둥 떠다닌다(floating)

부동 소수점은 고정 소수점처럼 2진수로 변환한 결과를 바로 저장하지 않고 추가 과정을 필요로 한다

 

| 정규화 (Normalization)

1.xxxx * 2^n형태로 만드는 것

정규화하는 법

1. 1로 시작할 때 : 정수부에 1만 남을 때까지 소수점을 왼쪽으로 이동시키고 이동한 칸 수만큼 n자리에 집어넣으면 된다

| ✍️ 100011.101 정규화하는 예시

------ 정규화 전 ------
100011.101(2)

------ 정규화 후 ------
1.00011101 * 2^5

 

2. 0으로 시작할 때 : 정수부에 1만 남을 때까지 소수점을 오른쪽으로 이동시키고 이동한 칸 수 * -1만큼 n자리에 집어넣으면 된다

| ✍️ 0.000101 정규화하는 예시

------ 정규화 전 ------
0.000101(2)

------ 정규화 후 ------
1.01 * 2^-4

 

IEEE 754 부동소수점 표현

IEEE 표준으로 부동 소수점으로 실수를 저장하는 방식에는 32비트, 64비트 두 가지가 있다

아래는 32비트 기준 부동 소수점 저장 형식

 

- 부호 비트

고정 소수점과 같이 맨 자리에 부호 비트 존재 (0 = 양수, 1 = 음수)

 

- 가수부

가수부에 정규화 결과 소수점 오른쪽에 있는 숫자들을 왼쪽부터 그대로 넣고 남는 자리는 0으로 채운다

소수점 왼쪽은 정규화를 하면 항상 1이어서 굳이 저장하지 않는다. 1을 hidden bit라고 부른다

 

- 지수부

bias(32비트 bias = 127, 64비트 bias = 1023)을 더한 값을 넣어준다

지수가 마이너스일 때 지수의 부호 비트를 하나 더 만드는 것이 애매해서, 8자리로 음수 양수를 둘 다 쉽게 표현하고자 bias를 더하는 방식이 생겼다

 

| 지수부 범위

0 ~ 127 음수
128 ~ 255 양수

 

| 부정 소수점 정리표

  32비트 64비트
이름 Single-Precision(단정도) Double-Precision(배정도)
지수부 8비트 11비트
가수부 23비트 52비트
데이터형 float double
bias 127 1023

 

고정 소수점 장점

1. 비트 수 대비 표현 가능한 수의 범위 넓음

2. 표현 가능한 수가 많아 정밀도 역시 높음

 

고정 소수점 단점

1. 변환 과정이 복잡함

2. 고정 소수점으로 표현된 변수끼리의 계산 과정이 복잡함

 

고정 소수점(fixed point)

위에서 설명한 방법대로 바꾼 정수부, 실수부를 그대로 저장

35.625(10)를 2진수로 변환하면 35(10) = 100011, 0.625(10) = 0.101(2) 100011.101가 된다

16비트 체계를 쓴다고 가정하고 보면 위 그림처럼 고정 소수점을 표현 가능

맨 앞자리는 부호 비트(Sign Bit) 0이면 양수, 1이면 음수이다

나머지 비트들은 미리 정한 소수점을 기준으로 정수부랑 소수부를 표현하는 비트로 각각 나눠진다

정수부 앞에 남은 자리,  소수부 뒤에 남은 자리는 0으로 채운다

 

고정 소수점 장점

1. 변환하기 쉬움

2. 고정 소수점으로 저장된 변수들끼리의 계산 과정이 쉬움

 

고정 소수점 단점

1. 비트 수 대비 표현 가능한 수의 범위 좁음

2. 표현 가능한 수가 적어 정밀도 역시 낮음

728x90

댓글