부트캠프와 다른 AI학교,
AI는 아이펠에서 배우세요
#인공지능 

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

32비트 부동소수점을 표현시 사용하는 편향된 지수를 (biased exponent) 사용하는 예시를 살펴보며, 편향된 지수 사용시 장점을 설명합니다. 추가적으로 지수 사용의 예외 경우도 설명합니다.

2024-03-29 | 허남철

앞서 1편에서 고정소수점과 부동소수점에 대하여 다루었습니다. 부동소수점을 설명하면서 지수에 편향을 (biased exponent) 추가하여 변환하였습니다. 특히 부동소수점을 공부하고 있는 독자라면 꼭 두 가지 질문이 들어야 할 것 같습니다. 부동소수점의 32비트 변환 과정 예를 들어 다시 살펴봅시다. 263.3의 이진수 변환 및 정규화 과정입니다. 다시 읽으시면서 어떤 두 가지 질문이 드는지 고민 해보시죠.

263.3을 2진수로 변환하면 100000111.010011001100110…이었습니다.
이를 정규화 하면 1.00000111010011001100110… x 2^8이 되었죠.
이를 32비트로 표현하면 다음과 같았습니다

+부호(1비트) : 0
지수(8비트) : 10000111 (지수 8을 2진수 변환 후 bias 127을 더함)
가수(23비트) : 00000111010011001100110 (소수점 아래 23자리를 사용)

궁금점이 떠오르셨나요?

네 맞습니다.

  • 첫째, 왜 가수의 전체 1.xxxxx을 사용하지 않고 소수점 아랫부분만 사용할까요?
  • 둘째, 왜 지수에 127 편향(bias)를 더해주었을까요?

1편의 말미에서 이는 ‘지수의 표현 범위를 조정하기 위해서’라고 말씀드렸습니다. 이번 글에서는 위 두 가지 궁금점을 차례로 해결하고 추가로 subnormal 을 추가하여 표현 범위를 해결한 내용까지 설명해 보겠습니다.

1. 왜 가수의 소수점 아래 부분만 사용할까요?

263.3을 이진수로 변환하고 정규화 하였을 때, 1.00000111010011001100110… x 2^8이었습니다. 이때 정규화는 그 과정 자체로 항상 정수 부분이 1로만 되도록 밑을(여기서는 2진수이기 때문에 2가 됩니다.) 곱하거나 나누어 줍니다. 따라서 정규화를 적용하면 항상 가수의 첫 번째 수는 1이 되는 것이죠. 수를 가수부를 23비트로 표현하기 위해서 항상 1인 첫 번째 수를 비트에 담을 필요가 있을까요? 당연히 아니겠죠. 이러한 이유로 가수는 소수점 이하 숫자들로만 23비트에 담게 됩니다. 23개 비트 중 고정되어있던 1개 비트를 추가로 사용함에 따라 2^22 개 만큼 더 가수로 표현할 수 있게 되었습니다.

2. 왜 편향된 지수를 사용할까?

컴퓨터는 뺄셈 연산을 위해 2의 보수법을 사용합니다. 이때, 부호가 있는 경우 즉, signed 2의 보수법은 구조상 비교가 어렵습니다. 따라서, 부호가 없는 unsigned 수로 표현하고자 bias 상수를 이용하여 지수를 편향하게 됩니다.
편향을 사용할 때 또 다른 장점은 양수, 음수 표현력에 있습니다. 가수의 경우 첫 번째 비트를 부호로 사용하여 양수와 음수를 표현합니다. 만약 지수 8비트도 가수처럼 첫 번째 비트를 사용하여 음수와 양수를 표현하면 어떻게 될까요?

지수가 0인 경우 +0(00000000) 과 -0(10000000)으로 두 가지로 표현되어 낭비입니다. 이때 편향된 지수를 도입하여 +0과 -0 중복을 사용하는 단점을 해결합니다.

  • 편향된 지수 (biased exponent) : 지수 값을 특정 값만큼 일정하게 이동하는 방법(offset). 고정된 값을 더하거나 뺀다.

편향된 지수를 아래에 표로 정리해 보겠습니다.

앞서 보았던 지수 8비트 10000111 는 2진수로 135의 값이고, 편향을 주어 135-127 = 8 입니다.
따라서, 지수부분 8비트 10000111은 지수가 8이다! 라는 뜻입니다.

3. 여전히 남아있는 문제, 모든 비트가 0이라면 ?

앞서 편향된 지수로 8비트에 해당하는 0(00000000)에서 255(11111111) 사이를 -127에서 128 사이 수를 표현했습니다. 하지만 여전히 한 가지 문제점이 남아있습니다. 바로 숫자 0을 32비트로 표현할 수 없다는 점입니다. ‘가수의 23비트를 모두 0으로, 지수의 8비트를 가장 작은 0으로 하는’ 즉, 모든 비트가 0인 경우를 봅시다.

전체 32비트가 모두 0인 경우

  • 부호는 양수 : 0
  • 지수 : 00000000은 -127입니다.
  • 가수 : 정수가 1이고 소수점 이하 0이 23개 인 1.000…000 입니다.

즉 1.000…. x 2^-127이 됩니다. 이는 매우 작은 수지만 0이 될 수 없습니다. 이러한 이유 때문에 지수에 예외를 두기로 한 것이 subnormal number 입니다. 규칙은 다음과 같습니다.

  • 지수 8비트가 모두 0인 경우, 00000000
    1. 소수점 앞 정수를 1이 아닌 0으로 쓴다.
    2. 지수는 -127이 아닌 -126을 사용한다.

이렇게 사용하였을 경우 장점은 첫째, 숫자 0을 표현하게 됩니다. 둘째, 0과 2^-126 사이의 더 작은 수도 표현할 수 있게 되었습니다. 실제로 지수가 모두 0이고, 가수를 0이 아닌 가장 작은 수 0…01 로 표현하면 0다음으로 가장 작은 수로 2의 -149 승 까지 표현할 수 있게 됩니다.

그 밖의 예외 255

subnormal number 0 과 비슷하게 예외 경우로 사용하는 것이 하나 더 있습니다. 바로 255(지수의 모든 비트가 1인 경우) 입니다. 즉 지수 8비트가 11111111 인 경우 무한(infinity) 과 NaN(Not a Number) 로 사용합니다. 두 가지로 나누어 사용하는 규칙은 아래와 같습니다.

  • 지수 비트가 모두 1이고, 가수가 모두 0일 때 : 무한(infinity)
  • 지수 비트가 모두 1이고, 가수 중 한 비트라도 1일 때 : NaN

마무리

이번 글에서는 편향된 지수와 특수하게 사용되는 경우를 살펴보았습니다.
결론적으로 0 과 255를 반영한 편향된 지수는 아래와 같습니다.

본 글이 부동소수점의 편향된 지수를 공부하시는 분께 도움이 되었으면 좋겠습니다.

reference