[수학] 고정 소수점과 부동 소수점

MJ·2022년 9월 18일
0

[수학] 기초수학

목록 보기
4/4
post-thumbnail

고정소수점

고정 소수점은 컴퓨터에서 실수를 표현하기 위해서 만들어진 산술 방식입니다.
소수부의 자릿수를 미리 정해놓고, 고정된 자릿수의 소수를 표현하는 방식 입니다.
실수는 정수부와 소수부로 나뉩니다.

컴퓨터가 32비트 체계로 숫자를 저장한다고 가정을 두고 설명하자면, 32비트 중에서
앞의 1비트는 부호비트입니다. 실수가 음수라면 1, 양수라면 0이 저장됩니다.
정수부에 15비트는 실수 중에서 정수만 저장되는 공간입니다. 소수부에 16비트는 실수 중에
소수부만 저장되는 공간입니다. 모든 비트에 저장되는 수들은 2진수로 저장 됩니다.


고정소수점 방식

7.625 라는 실수가 컴퓨터에 저장 될 때, 2진수로 저장되는 동작 과정을 살펴 보겠습니다.

1) 실수의 부호를 확인한다. 양수이므로 부호 비트, 1비트 공간에 0이 저장된다.
2) 7.625 실수를 정수부와 소수부로 구분해서 2진수로 변환 하고 정수부와 소수부에 저장한다.
정수부 : 7(111) | 소수부 : 0.625(.101)

3) 정수부는 .을 기준으로 뒤에서부터 차곡히 저장되고, 앞에서부터 저장 된다.
(정수뒤에 붙음)
4) 남은 비트 공간은 모두 0으로 채워진다.

⚠️ 고정소수점 방식은 잘 사용하지 않습니다.

구현하기 편리하지만, 사용하는 비트 수 대비 표현 가능한 수의 범위나 정밀도가 떨어
지기 때문에 잘 사용하지 않습니다.



부동소수점

부동 소수점 방식은, 고정 소수점 방식에서 몇가지를 더 추가해서 표현 가능한 수의 범위나
정밀도가 높습니다. 대부분의 프로그래밍에서 실수를 표현할 때 사용하는 방식입니다.


정규화

부동 소수점 방식에서 정규화는 2진수로 변환된 실수를 1.xxx 2^(승) 형식으로 변환하는 것을
의미 합니다. 이 정규화 방식은 부동 소수점 방식을 사용하는 모든 실수에 적용됩니다.
101.111 라는 실수가 있다면, 1.01111 * 2^2승으로 표시되고, 0.00101 라는 실수가 있다면
1.01 * 2^-3승 으로 표시 됩니다.

즉, 정수부에 1만 남을 때 까지, 실수의 소수점 위치를 우측 또는 좌측으로 이동 시킵니다.

소수점을 이동시킨다는 의미로 인해 부동 소수점으로 부릅니다.


IEEE 754 부동소수점 표현

초기에는 부동소수점을 표현하기 위해서 컴퓨터마다 여러가지 서로 다른 형식을 사용했지만,
현재는 대부분의 컴퓨터가 호환성을 위해 IEEE에서 표준화한 IEEE 754 형식을 사용하고 있다.

IEEE 754 형식은 두 가지 방식이 있는데, 32비트를 사용하는 단정도(single)와 64비트를
사용하는 배정도(double) 방식이 있습니다.


단정도 부동소수점 방식

32비트를 사용하는 단정도 방식에는 1비트를 부호로 사용하고, 8비트를 지수, 나머지 23비트를
가수로 사용합니다.


부호

부호 비트는 양수와 음수의 공간을 1비트에 저장한다. 0 양수 | 1 음수


지수

n의 제곱을 나타내는 수, 기수위에 달려있는 숫자를 뜻한다. (2^3승 : 3이 지수)
단정도 방식에서 지수는 8비트의 공간에 저장됩니다. 바이너리로 표시해보면

1_00001010_00000000~~000
부호_지수_가수

00001010(8비트)가 지수입니다. 지수는 2^승으로 표현 됩니다. 여기서 실제 저장공간에
저장하기 전에 지수에 127을 더해서 모든 지수를 양수로 만들어줍니다.

지수는 양수뿐만 아니라 음수일 경우도 있기에, 컴퓨터는 8비트(지수)부분을 음수와 양수로
구분짓기 위해서 기준점을 만듭니다. 8비트는 0000.0000 부터 1111.1111 까지 표현할 수
있으므로, 0부터 255까지 표현이 가능합니다. 255을 반으로 나눠서 음수는 0~126 까지
양수는 128~255까지 표현할 수 있게 합니다. 그리고 기준이 되는 0127이 됩니다.

즉, 0이 기준점이 되므로 만약 지수가 6인 수를 지수공간에 저장한다면 0+6 연산을 해야
합니다. 0보다 큰 수가 되어야 양수로 저장되기 떄문입니다. 0+6127+6을 뜻합니다.

지수가 -6이라면, -6+127 = 121이 되겠죠.


가수

소수점 이하의 모든 수들을 가수라고 합니다. 가수는 실질적인 데이터를 의미 합니다.
실질적인 데이터를 저장할 때 정규화 방식을 사용해서 비트에 저장합니다.

1) 가수를 1.xxxxx 형식으로 표현할 수 있도록 지수를 조정한다.
2) 가수를 표현할 때, 앞에 1을 제외하고 xxxx 수만 표현한다.
3) 1은 항상 존재하기에 저장할 필요가 없다.
4) 숫자가 0인 경우에는, 가수를 모두 으로 채운다.


단정도 부동소수점 방식 사용하기

15.625를 단정도 부동소수점 방식으로 비트 공간에 저장하는 과정을 살펴보겠습니다.

0) 양수이므로 부호 비트는 0
1) 15.625를 2진수로 변환 정수부 : 1111 | 소수부 : 101 = 1111.101(2)
2) 가수를 정규화 합니다. 1111.101를 정규화 하면 1.111101 * 2^3가 된다.
3) 지수를 찾는다. 2^3승에서 3이 지수, 양수이므로 127을 더해줍니다.
3+127 = (130 == 1000_0010)

4) 가수를 찾는다. 1.111101에서 1을 제외한 나머지 수가 가수가 된다. 이를 저장합니다.
5) 결과는 아래와 같습니다.
0_10000010_11110100000...000 = 부호 : 0 | 지수 : 1000.0010 | 가수 : 111101000...0
가수에서 111101 부분을 할당하고, 할당하지 못한 저장공간은 모두 0으로 채워줍니다.

profile
프론트엔드 개발자가 되기 위한 학습 과정을 정리하는 블로그

0개의 댓글