고정 소수점 vs. 부동 소수점

이명균·2022년 11월 22일
0

CS_Week4

목록 보기
1/3

실수의 표현 방식

컴퓨터에서 실수를 표현하는 방법은 정수에 비해 훨씬 복잡한데 이러한 이유는 컴퓨터에서는 실수를 정수와 마찬가지로 2진수(0&1)로만 표현해야 하기 때문에 다음과 같은 다양한 방법들이 연구되어 왔다.

  1. 고정 소수점(fixed point) 방식

  2. 부동 소수점(floating point) 방식


1. 고정 소수점(Fixed Point)

표현법

고정 소수점(fixed point)은 정수를 표현하는 비트와 소수를 표현하는 비트수를 미리 **고정하고** 해당 비트만을 활용하여 실수를 표현합니다.

  • 처음 1비트sign(부호)을 나타냅니다. 양수는 0, 음수는 1입니다.
  • 다음 15비트integer part(정수부)를 나타냅니다.
  • 다음 16비트fractional part(소수부)를 나타냅니다.
  • 그리고 정수부와 소수부의 경계를 소수점의 위치라고 생각하고 2진수로 변환된 수를 그대로 넣으면 됩니다.
  • 마지막으로 남는 자리는 모두 0으로 채우면 됩니다.

fixed point, 고정 소수점

예를 들어, 10진수 7.625를 32비트 고정 소수점으로 표현해보겠습니다. 먼저 10진수 7.625를 2진수로 표현하면:

7.625 (10) =2² × 1 + 2¹ ×1 +20 ×1 +2-1 ×1 +2-2 ×0 +2-3 ×1 = 111.101(2)

32비트 고정 소수점으로 표현 방식

장단점

  • 장점
    고정 소수점 방식은 밑에서 다룰 부동 소수점 방식에 비해서 실수를 표현하는 방법이 단순하고, 속도가 빠르다.

  • 단점
    이 방식은 정수부와 소수부의 자릿수가 크지 않으므로, 표현할 수 있는 범위가 매우 적다는 단점이 있다. 또한 정밀도가 낮다는 특징도 있다. 따라서 높은 정밀도가 필요없는 소규모 시스템에서만 간혹 쓰인다.


2. 부동 소수점(Floating Point)

표현법

소수점이 옮겨다니는 방식의 실수 표현법이다.

부동 소수점 표현 방식은 고정 소수점 표현 방식과 비트를 사용하는 체계가 다릅니다. 그리고 부동 소수점은 이를 표현하는 다양한 체계가 있는데, 일반적으로 가장 널리 쓰이는 표준은 IEEE 754라고 합니다. IEEE 754에 따르면 실수를 다음과 같이 부동 소수점 방식으로 표현할 수 있다.

  • 2진수를 정규화(normalize) 합니다.
  • 처음 1비트는 sign(부호)를 나타냅니다 (0은 양수, 1은 음수).
  • 다음 8비트는 exponent(지수부)를 나타냅니다. 정규화 과정에서 얻어낸 지수에 bias를 더한 값으로 채웁니다.
  • 다음 23비트는 mantissa(가수부)를 나타냅니다. 소수 부분의 값으로 채웁니다.

floating point, 부동 소수점

7.625 (10)를 부동 소수점으로 표현

2진수 변환: 111.101(2)
정규화: 1.11101(2) x 2²
Exponent: 2(10) + 127(10)(bias) = 129(10) = 10000001(2)
Mantassia: 11101(2)

장단점

  • 장점
    부동 소수점은 고정 소수점에 비해서 더 큰 실수를 표현할 수 있다. 예를 들어 고정 소수점은 정수 부분에 15개의 비트를 사용하는데. 이는 총 215 개의 정수를 표현할 수 있는데 이에 반해 부동 소수점의 경우에는 exponent에 8 비트를 사용합니다. 8 비트를 채울 수 있는 가장 큰 숫자는 11111111(2) 이지만, 부동 소수점 표현에서 이는 무한대의 숫자를 나타내는 특별한 수이므로 실질적으로 가장 큰 숫자는 11111110(2) 입니다. 이를 10진수로 바꾸면 254입니다. 254에는 bias 127이 더해져 있죠. 따라서 정규화 결과로 가질 수 있는 가장 큰 지수는 127(254-127)입니다. 다시 말해 32비트 부동 소수점에서 가질 수 있는 가장 큰 수의 정규화 결과는 1.xxx × 2127 와 같은 형태이다. 정규화 이전의 값을 고려했을 때 고정 소수점에 비해서 정수 자리에 훨씬 더 많은 비트를 할당할 수 있음을 알 수 있다.

  • 단점
    실수 연산이 부정확할 수 있다는 것이 부동 소수점 표현 방식의 가장 큰 단점이다. 이는 컴퓨터 하드웨어가 가지는 본질적인 한계점 때문에 완벽하게 극복할 수는 없다. 예를 들어 십진수 0.3을 2진수로 변환하면 0.0100110011...(2) 처럼 특성 수가 무한이 반복된다.
    따라서 컴퓨터가 실수 부분을 표현할 수 있는 비트수를 다 써버리게 되어 근사치로 표현되는 것이다


참고 자료
CS50 - 고정 소수점(fixed point)과 부동 소수점(floating point)

profile
Unlimited Potential

0개의 댓글