Memorizing/Quantization

부동소수점

Mingi Kim 2025. 3. 6. 18:34

도입

소수점을 표현하는 것은 고정 소수점과 부동 소수점이 있다. 고정 소수점의 경우 3.141592와 같이 고정된 위치의 소수점을 말하고 부동 소수점의 경우 소수점이 움직인다는 뜻이다.

그렇다면 부동소수점에서는 어떻게 소수점이 움직일까?

부동 소수점은 $(부호) * (가수) * (밑수)^{(지수)}$ 로 이루어진다.

지수를 어떻게 설정하느냐에 따라서 가수부가 표현할 수 있는 수의 범위(정밀도)가 달라진다. 그래서 부동소수점으로 부른다.

변환

컴퓨터는 2진수로 수를 이해하기 때문에 부동소수점은 보통 2진수로 나타낸다. 실수를 부동소수점으로 변환하는 예시를 보자.

먼저 $12.375$ 라는 10진수 고정 소수점의 실수를 생각해보자.

이것을 2진수로 변환하면 $1100.011_{(2)}$ 와 같다. 이것을 정규화하면 $1.100011*2^3$이 된다. 

정규화란?

더보기

정규화는 가수부의 첫번째 자리가 밑수보다 작은 한자리 자연수로 바꾸는 것을 의미하는데, 다음과 같은 이점이 있다.(feat. ChatGPT)

 

  • 표현의 유일성 확보:
    정규화를 통해 숫자를 1.xxx 형태로 표현함으로써 동일한 값에 대해 여러 표현 방식이 존재하는 것을 방지합니다. 예를 들어, 1.1×2³와 0.11×2⁴는 같은 값을 나타내지만, 정규화를 통해 항상 단 하나의 표준형(1.100011×2³ 같은 형태)으로 표현하게 됩니다.
  • 최대 정밀도 보장:
    IEEE 754 형식에서는 정규화된 수의 경우 소수점 왼쪽의 1은 항상 존재하므로 저장하지 않고(암묵적 비트), 가수에 더 많은 비트를 할당할 수 있습니다. 이를 통해 가용 비트 내에서 최대의 정밀도를 얻을 수 있습니다.
  • 연산의 일관성 및 효율성:
    정규화된 형태는 덧셈, 뺄셈 등 부동소수점 연산을 수행할 때 일관된 기준을 제공하여 연산 과정을 단순화하고, 결과의 반올림 및 오차 제어를 용이하게 만듭니다.

 

부동소수점은 IEEE754에서 규격을 정했는데, 아래와 같이 정의된다.

타입 부호 지수부 가수부 총 비트수 편향
Half Precision (FP16) 1 5 10 16 15
Single Precision (FP32) 1 8 23 32 127
Double Precision (FP64) 1 11 52 64 1023

만약 Single Precision으로  $1.100011*2^3$ 를 변환하고자한다면 다음과 같이 할 수 있다. 

먼저, 부호비트는 양수는 0 음수는 1로 나타낸다.

그리고 지수에 편향을 더해준다. 현재 지수가 3이므로 더해주면 130이 되는데 이를 이진수로 나타내면 $10000010$ 이다.

그리고 가수부는 그대로 $100011$을 사용해주는데 가수부의 비트수가 23비트이므로 나머지는 0으로 채워준다.

즉 $1.100011*2^3$ 는 Single Precision으로 $0 10000010 10001100000000000000000$으로 나타나게 된다. 

마무리

부동 소수점은 지수부, 가수부를 이용하여 정밀도를 동적으로 표현함으로써 극히  큰 수부터 극히 작은 수까지 폭넓게 표현할 수 있는 방법이다. 과학, 공학 계산에서 많이 쓰인다.