부동소수점 표현 (IEEE 754 규격)

IT 위키
인공무능 (토론 | 기여)님의 2025년 10월 8일 (수) 04:10 판 (새 문서: 부동소수점 표현이란 유한한 비트 수로 실수를 근사해서 표현하는 방식으로, IEEE 754는 현재 컴퓨터 시스템에서 가장 널리 쓰이는 부동소수점 연산 표준이다. ==개요== 부동소수점 표현에서는 실수 x를 다음과 같이 구성된 요소로 표현한다: *부호 비트 (sign) *지수부 (exponent) *가수부 또는 유효숫자 부분 (significand 혹은 mantissa) 이 표현은 마치 과학적 표기법(예: ±1.xxx...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

부동소수점 표현이란 유한한 비트 수로 실수를 근사해서 표현하는 방식으로, IEEE 754는 현재 컴퓨터 시스템에서 가장 널리 쓰이는 부동소수점 연산 표준이다.

개요[편집 | 원본 편집]

부동소수점 표현에서는 실수 x를 다음과 같이 구성된 요소로 표현한다:

  • 부호 비트 (sign)
  • 지수부 (exponent)
  • 가수부 또는 유효숫자 부분 (significand 혹은 mantissa)

이 표현은 마치 과학적 표기법(예: ±1.xxx × 2^E)과 유사하며, IEEE 754는 이 방식에 엄격한 규격을 부여한다.

예시:

1.101 × 2⁵ 이라는 부동소수점 수가 있다면,

  • 지수부: 5 (위의 예에서 2⁵ 부분)
  • 가수부: 1.101 (소숫점 있는 이진수 부분)

IEEE 754 표준은 이진 기반(binaray) 부동소수점 표현을 중심으로 정의되며, ±0, 무한대, NaN (Not a Number), 비정규수(subnormal) 등의 특수 값을 정의하고, 반올림 방식(rounding modes) 및 예외 처리(exception)를 규정한다.

표준의 발전은 다음과 같다:

  • IEEE 754‑1985: 최초 버전 (이진 부동소수점 중심)
  • IEEE 754‑2008: 십진수(decimal) 포맷 추가, 규정 강화
  • IEEE 754‑2019: 사소한 수정 및 명확화

표현 형식[편집 | 원본 편집]

IEEE 754는 여러 포맷을 정의하지만, 가장 흔히 사용되는 것은 단정밀도(single precision, 32비트)배정밀도(double precision, 64비트) 이다.

단정밀도 (32비트)[편집 | 원본 편집]

32비트 구성은 다음과 같다:

  • 부호 비트: 1비트
  • 지수 비트: 8비트
  • 가수 비트: 23비트

이 표현이 나타내는 값은 다음 식으로 정의된다: \[ (-1)^{\text{sign}} \times 1.\!f \times 2^{E - \text{bias}} \] 여기서

  • E는 지수부에 저장된 값 (biased exponent)
  • bias = 127
  • f는 가수 부분의 이진 소수 (정규화된 수에서는 맨 앞의 1을 저장하지 않음)

지수부가 모두 0이거나 모두 1인 경우는 특수한 의미가 있다 (예: 0, 비정규수, 무한대, NaN).

배정밀도 (64비트)[편집 | 원본 편집]

64비트 구성은 다음과 같다:

  • 부호 비트: 1비트
  • 지수 비트: 11비트
  • 가수 비트: 52비트

이 경우 bias = 1023이며, 표현 방식은 단정밀도와 유사하다.

특수 값 및 예외 처리[편집 | 원본 편집]

IEEE 754는 일반 실수 표현 외에도 여러 특수 값을 정의한다:

  • 제로 (Zero)
    •  지수부와 가수부가 모두 0인 경우를 +0 또는 −0으로 구분 가능하다.
  • 비정규수 (Subnormal, Denormal)
    • 지수부가 0이고 가수부가 0이 아닌 경우, 정상화된 표현이 불가능한 아주 작은 수를 표현하기 위해 사용된다.
  • 무한대 (Infinity)
    • 지수부가 모두 1, 가수부가 0인 경우 +∞ 또는 −∞
  • NaN (Not a Number)
    • 지수부가 모두 1, 가수부가 0이 아닌 경우 (유효 숫자 없음)

또한, 연산 중 다음과 같은 예외가 발생할 수 있으며 IEEE는 이를 정의한다:

  • invalid operation
  • division by zero
  • overflow
  • underflow
  • inexact

반올림 방식은 기본적으로 "가장 가까운 값으로 반올림 (ties to even)"이지만, 방향성 반올림 (toward 0, toward +∞, toward −∞) 방식도 허용된다.

변환 및 연산 방식[편집 | 원본 편집]

부동소수점 수의 저장 또는 읽기는 다음 과정을 따른다:

  • 1. 절댓값을 이진 표현으로 변환 (정수부 + 소수부)
  • 2. 정규화된 형태(1.xxx × 2^k)로 변환
  • 3. 지수 k에 bias를 더하여 지수부 비트로 저장 4. 가수부의 소수 부분 비트를 가수 비트 필드에 저장

반대로, 저장된 비트를 해석할 때는 지수부에서 bias를 빼고, 가수에 숨겨진 1을 복원하여 실제 값을 계산한다.

부동소수점 연산 (덧셈, 뺄셈, 곱셈, 나눗셈, 제곱근 등)에서는 무한 정밀도 수학적 결과를 가장 가까운 표현 가능한 값으로 반올림하여 표현하는 “정확한 반올림 (correct rounding)”이 요구된다.

장점과 한계[편집 | 원본 편집]

부동소수점 표현은 매우 큰 수와 매우 작은 수를 유한한 비트로 표현 가능하게 해 주지만, 다음과 같은 제약이 있다:

  • 근사 오차: 대부분의 실수는 정확히 표현될 수 없으며 반올림 오류가 발생한다
  • 연산 비결정성: 부동소수점 덧셈의 결합 법칙 등이 성립하지 않을 수 있다
  • 언더플로/오버플로 가능성
  • 비교 연산의 미묘한 문제 (예: −0과 +0, NaN 처리)

예시[편집 | 원본 편집]

예를 들어, −7.75를 단정밀도 IEEE 754로 표현하면 다음과 같다:

  • 1. −7.75 = −(111.11)_2 = −(1.1111 × 2^2)
  • 2. 지수 k = 2, bias = 127 → 저장 지수 = 129 = (10000001)_2
  • 3. 가수부 = .1111 → 가수 비트 23비트 영역에 저장
  • 4. 결과 비트열 = 1 | 10000001 | 11110000000000000000000

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • David Goldberg, What Every Computer Scientist Should Know about Floating-Point Arithmetic, ACM Computing Surveys, 1991.
  • William Kahan 등, IEEE Standard for Floating-Point Arithmetic (IEEE 754‑2008/2019)

각주[편집 | 원본 편집]