본문 바로가기
computer science

고정 소수점과 부동 소수점

by 망고먹는 개발자 2021. 7. 26.

고정 소수점과 부동 소수점은 컴퓨터에서 실수(real number)를 표현하는 방법이다

 

1. 고정 소수점 (Fixed Point)

말 그대로 소수점이 고정된 형태이다.

32비트의 수라면 언제나 1비트를 부호 표현에, 15비트를 정수 표현에, 16비트를 소수 표현에 사용하는 식이다. 소수부에 할당된 비트의 숫자에 따라 정밀도가 달라진다.

 

예를 들어 부호부에 1개의 비트, 정수부에 n개의 비트, 소수부에 m개의 비트를 할당한 수의 경우,

1. 표현 가능한 실수는 2^(n+m+1)개이다.

2. 표현 가능한 가장 작은 차이는 2^(-m)이 되며 이를 분해능이라고 한다.

 

표현 가능한 실수의 범위와 정밀도가 제한적이기 때문에 실질적으로 잘 사용하지 않는다.

 

 

2. 부동 소수점 (Floating Point)

부동의 부는 뜰 부자로 소수점이 이동 가능하다고 해서 붙여진 이름이다.

부동 소수점 방식에서는 수를 정수와 소수 부분으로 나누지 않고, 지수(exponent)와 가수(fraction) 부분으로 나눠서 표현한다.

IEEE에서는 이 부동 소수점에 대한 표준을 정해 명시하고 있다.

https://ko.wikipedia.org/wiki/IEEE_754

 

그 중 32비트 단정밀도는 부호부에 1비트, 지수부에 8비트, 가수부에 23비트를 할당하는 표현 방식을 말하며, 반드시 구현하도록 권장된다. 많은 프로그래밍 언어의 4바이트 float 형식이 이 32비트 단정밀도를 따르고 있다.

그 외에 1, 11, 52 비트로 표현하는 64비트 배정밀도와 1, 15, 112 비트로 표현하는 128비트 4배정밀도가 있다.

 

예를 들어 -142.5625 를 32비트 단정밀도로 표현한다면

 

1. 부호부를 1로 지정한다 (음수 1, 양수 0)

2. 표현하고자 하는 수의 절댓값을 이진법으로 나타낸다. (142.5625 = 10001110.1001)

3. 소수점을 이동시켜 소수점 왼쪽에 1이 하나만 남도록 한다. (10001110.1001=1.00011101001×2^7) 

4. 소수점을 제거하고 가수부의 비트 수에 맞춰 부족한 만큼을 0으로 채우면 이게 가수부가 된다. (10001110100100000000000)

5. 지수는 7이므로 Bias(32비트 단정밀도에서는 127)를 더한 134을 이진법으로 표현하면 이것이 지수부가 된다 (10000110)

6. 결론적으로 -142.0625를 32비트 부동소수점으로 표현하면, 1 10000110 10001110100100000000000 이 된다.

 

5번에서의 Bias란 부호부를 가지지 않는 지수부가 음수가 되지 않도록 보정해주는 값을 말한다. 2^(n-1)-1 

 

부동 소수점 방식은 고정 소수점 방식에 비해 더 다양한 범위의 숫자를 표현할 수 있다는 장점이 있지만, 여전히 정밀도 문제가 존재하기 때문에 컴퓨터 상에서 실수를 다룰 때에는 연산이 언제나 오차를 가질 수 있다는 것을 유의하자.

 

일반적으로 언어들은 다양한 정밀도의 실수형을 제공하고 있으며, 경우에 맞게 적절한 정밀도의 자료형을 사용해야한다.

 

다양한 정밀도 문제에 대해서는 위키를 참조

https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90#%EC%A0%95%ED%99%95%EB%8F%84_%EB%AC%B8%EC%A0%9C

반응형

'computer science' 카테고리의 다른 글

Karatsuba Multiplication  (0) 2021.09.08

댓글