컴퓨터의 산술연산 - 부동 소수점 실수

 

부동 소수점 수의 일반적인 표현식은 다음과 같다.

 

 

여기에서 S는 부호비트이다.

0일 경우 양수, 1일 경우 음수를 나타낸다.

 

 

부동 소수점에서 실수를 표현할 때는, 유효 숫자 부분이 항상 1.0 이상 2.0 미만이 되도록 정규화시킨다.

(1.xxxx 형식으로 정규화)

즉, 실수를 2진수로 나타낼 때, 소수점 앞에 항상 1이 존재하게 된다.

 

 

 

유효 숫자의 나머지 부분은 Fraction이라고 부른다.

즉, 실제로 저장되는 부분은 1을 제외한 소수점 이하의 값이다.

예를 들어, 1.1101과 같은 숫자라면, 1은 저장하지 않고 소수점 이하의 "1101"만 저장된다.

 

 

 

 

지수는 실수에서 소수점 위치를 나타낸다. 하지만 지수는 단순히 음수나 양수로 표현되지 않고, Bias라는 값을 더해서 저장한다.

이는 지수를 부호가 없는 양수 값으로 처리하기 위함이다.

 

 

(single precision)인 경우, Bias = 127

(double precision)인 경우, Bias = 1023

 

 

 

 

 

 

 

실수의 2진수 변환 과정

 

 

예시 두 개로 알아보자.

 

1. 5.75를 2진수로 변환하는 과정

 

1단계: 정수 부분(5)의 2진수 변환

  • 5를 2진수로 변환하기 위해, 계속해서 2로 나누고 나머지를 기록한다.
    1. 5÷2=2 (나머지 1)
    2. 2÷2=1 (나머지 0)
    3. 1÷2=0 (나머지 1)
    5를 2진수로 변환하면 101이 된다.

 

 

2단계: 소수 부분(0.75)의 2진수 변환

  • 소수 부분을 2진수로 변환하기 위해서는 2를 곱해 나가며, 곱한 결과가 1보다 크거나 같으면 1, 작으면 0을 기록한다.
    1. 0.75×2=1.5  → 정수 부분이 1이므로 1 기록, 소수 부분 0.5 남음.
    2. 0.5×2=1.0    → 정수 부분이 1이므로 1 기록, 소수 부분 0 남음.
    0.75를 2진수로 변환하면 0.11이 된다.

 

따라서 5.75를 2진수로 표현하면 101.11이 된다.

 

 

 

 

2. 0.15625를 2진수로 변환하는 과정

 

소수 부분(0.15625)의 2진수 변환

  • 소수 부분만 있기 때문에, 0.15625에 2를 곱해 나가면서 정수 부분을 기록하고 소수 부분을 반복해서 처리한다.
    1. 0.15625×2=0.3125 → 정수 부분이 0이므로 0 기록, 소수 부분 0.3125 남음.
    2. 0.3125×2=0.625  → 정수 부분이 0이므로 0 기록, 소수 부분 0.625 남음.
    3. 0.625×2=1.25  → 정수 부분이 1이므로 1 기록, 소수 부분 0.25 남음.
    4. 0.25×2=0.5  → 정수 부분이 0이므로 0 기록, 소수 부분 0.5 남음.
    5. 0.5×2=1.0   → 정수 부분이 1이므로 1 기록, 소수 부분 0 남음.

 

따라서 0.15625를 2진수로 변환하면 0.00101이 된다.

 

 

 

 

 

이렇게 숫자를 이진수로 바꾸는 방법을 알아봤으니, 부동 소수점 표기법에 맞춰서 변환시켜보자.

 

 

1. -0.75의 IEEE 부동 소수점 표기법

단계 1: 부호 비트(S)

  • -0.75는 음수이므로, 부호 비트(S)는 1

단계 2: 소수점 아래 값(Fraction)

  • 0.75는 2진수로 변환하면 0.11

정규화된 형태

따라서, Fraction 부분은 1.1에서 소수점 이하 부분인 1만 기록된다.

 

단계 3: 지수(Exponent)

  • 실제 지수는 -1이므로, 단정도(single)에서는 Bias가 127이므로 실제 지수 값은 127 - 1 = 126
  • 지수를 8비트로 표현하면 01111110

 

따라서, -0.75를 IEEE 754 단정도 부동 소수점 형식으로 표현하면 1 01111110 10000000000000000000000 이다.
(각각 1비트, 8비트, 23비트)

 

 

 

 

 

2. 0.625의 IEEE 부동 소수점 표기법

단계 1: 부호 비트(S)

  • 0.625는 양수이므로, 부호 비트(S)는 0

단계 2: 소수점 아래 값(Fraction)

  • 0.625는 2진수로 변환하면 0.101

정규화된 형태

여기에서 Fraction 부분은 01만 기록됨

 

단계 3: 지수(Exponent)

  • 실제 지수는 -1이고, Bias는 127이므로 지수는 126
  • 지수를 8비트로 표현하면 01111110

 

 

 

 

3. IEEE 부동 소수점 표현으로 11000000101000...00이 나타내는 숫자

이 표현은 (single precision) 부동 소수점 표기법을 따른다고 할 때

 

단계 1: 부호 비트(S)

  • 첫 번째 비트가 1이므로, 음수이다.

단계 2: 지수(Exponent)

  • 다음 8비트는 지수 부분이다.
  • 이진수로 10000000이므로, 10진수로 변환하면 128이다.
  • 실제 지수는 128 - 127 = 1

단계 3: 소수점 아래 값(Fraction)

  • 나머지 부분이 Fraction이므로, 10100...00은 1.101이 된다. (맨 앞의 1은 암시적으로 존재)
  • 이진수 1.101을 10진수로 변환하면 1 + 0.5 + 0.125 = 1.625

 

따라서 결과는 -1 * 1.625 * 2 = -3.25

더보기

 

  • 정수 부분: 1 × 2^0 = 1
  • 소수 첫 번째 자리: 1 × 2^-1 = 0.5
  • 소수 두 번째 자리: 0 × 2^-2 = 0
  • 소수 세 번째 자리: 1 × 2^-3 = 0.125

 

이것을 모두 더하면 1 + 0.5 + 0.125 = 1.625