AI 기초부터 핵심&최신 트렌드까지 AI학교 아이펠에서 끝내세요!
#아이펠 

고정소수점과 부동소수점 – 컴퓨터가 숫자를 이해하는 방법

실수를 표현하는 방법으로 널리 알려진 고정소수점(fixed-point)과 부동소수점(floating-point)은 각각의 고유한 특징과 용도가 있습니다. 이번 포스트에서는 이 두 가지 방식의 개념을 살펴보고, 실제 계산 과정을 통해 어떻게 컴퓨터가 이를 처리하는지 살펴보겠습니다.

2024-03-15 | 허남철

들어가며 – 한자 “부동(浮動)”과 영어 “float”의 의미

“부동”이라는 한자는 떠다니며 정해진 위치가 없음을 의미합니다. 이는 “float”라는 영어 단어와 깊은 연관이 있습니다. 컴퓨팅에서 “float”는 부동소수점 수를 지칭하는데, 이 용어는 소수점의 위치가 고정되어 있지 않고 데이터의 크기나 정밀도에 따라 자유롭게 이동할 수 있다는 사실을 반영합니다. 이러한 특성은 컴퓨터가 다양한 범위의 실수를 효율적으로 표현할 수 있게 해 줍니다. 이번 글에서는 고정소수점과 부동소수점을 소개하고 계산 예시도 살펴보겠습니다.

고정소수점

고정소수점 방식에서는 숫자를 정수 부분과 소수 부분으로 나누어 각각 고정된 위치에 저장합니다. 예를 들어, 263.3이라는 숫자를 4바이트(32비트) 시스템에서 표현한다고 가정해 봅시다. 여기서 부호는 1비트, 정수 부분은 16비트, 소수 부분은 15비트를 사용한다고 합시다.

  • 정수 부분(263): 2진수로 변환하면 0000000100000111입니다.
  • 소수 부분(0.3): 2진수로 근사치를 표현하면 010011001100110입니다 (정확한 표현은 불가능하므로 근사치 사용).

따라서, 이 시스템에서 263.3은 부호 비트가 0(양수), 정수 부분이 0000000100000111, 소수 부분이 010011001100110으로 표현됩니다.

부동소수점

부동소수점 수는 가수(mantissa)와 지수(exponent)로 구분하여 표현합니다. IEEE 754 표준에서는 이를 통해 매우 넓은 범위의 숫자를 표현할 수 있습니다. 예시로, 263.3을 부동소수점 형식으로 변환하는 과정을 살펴보겠습니다. 부호는 1비트, 지수는 8비트, 가수는 23비트를 사용합니다.

  1. 부호(bit): 양수이므로 0입니다.
  2. 정규화: 263.3 을 2진수로 변환하면 100000111.01001100110011001100110011...(무한반복)이고, 정규화를 통해 1.0000011101001100110011001100110011... * 2^8로 표현할 수 있습니다.
  3. 가수(mantissa): 소수점 이하 부분을 사용합니다. 필요하다면 23비트로 맞추기 위해 뒷부분을 잘라내거나 0으로 채웁니다.
  4. 지수(exponent)와 Bias: 지수는 8이고, IEEE 754 표준에서는 32비트 부동소수점의 경우 지수에 127(Bias)를 더한 값을 사용합니다. 따라서, 지수 부분은 8 + 127 = 135, 2진수로 10000111.

이런 식으로, 263.3은 부동소수점으로 표현될 때 부호, 지수, 가수 부분을 각각 0, 10000111 , 00000111010011001100110으로 나타낼 수 있습니다.

부동소수점에서 Bias 127을 더하는 이유

이는 지수 표현의 범위를 조정하기 위해서입니다.

지수를 부호 없는 정수로 표현할 때, 음수 지수와 양수 지수를 모두 다루어야 합니다. 하지만 부동소수점 표준에서는 음수를 다루는 대신 Bias 값을 더하여 모든 지수를 양수로 만들어 처리합니다. 이렇게 함으로써 지수를 부호 없는 정수로 표현할 수 있으며, 지수의 범위를 더 크게 확보할 수 있습니다. Bias에 대한 더욱 자세한 내용은 다음 글에서 다루겠습니다.

2편 : 부동소수점 편향된 지수 Biased Exponent