IT/컴퓨터구조

🖥️ [컴퓨터구조] 부동소수점 연산 (IEEE 754 표준)

BlogFlow 2025. 3. 6. 18:00
반응형

[컴퓨터구조 목차 바로가기]

3️⃣ 컴퓨터 연산 방식

컴퓨터는 실수(Floating Point Number)를 정확하게 표현하고 연산할 수 있도록

부동소수점(Floating Point) 연산 방식을 사용합니다.

그러나, 실수를 이진수(Binary)로 변환하여 처리하는 과정에서 정확성 문제, 반올림 오류, 오버플로우/언더플로우 등의 문제가 발생할 수 있습니다.

이를 해결하기 위해 IEEE 754 표준(IEEE Standard for Floating-Point Arithmetic) 이 정의되었습니다.

이번 섹션에서는 부동소수점의 개념, IEEE 754 표준 형식, 연산 방식, 오차 문제, 그리고 실제 CPU에서의 부동소수점 연산 최적화 기법을 자세히 살펴보겠습니다.


🔹 1. 부동소수점(Floating Point)이란?

1.1 부동소수점의 개념

부동소수점은 소수점이 "고정(Fixed)"되지 않고, "부동(Floating)"하는 방식으로 표현되는 실수입니다.

💡 예제 (10진수 vs. 부동소수점 표현)

표현 방식 예제 (10진수 0.0123)
고정소수점 (Fixed Point) 00000000.00001111
부동소수점 (Floating Point) 1.23 × 10⁻²

부동소수점은 가수(Mantissa)와 지수(Exponent)를 사용하여 실수를 표현

소수점 위치를 유동적으로 조정하여 더 넓은 범위를 표현 가능


🔹 2. IEEE 754 부동소수점 표준

2.1 IEEE 754 표준이란?

IEEE 754 표준은 부동소수점을 저장하고 연산하는 방법을 정의한 국제 표준입니다.

이 표준은 정확한 연산을 보장하고, 하드웨어 및 소프트웨어 간의 호환성을 유지하는 역할을 합니다.

💡 IEEE 754 표준의 주요 형식

형식 비트 수 정밀도 예제
단정밀도(Single Precision) 32비트 약 7자리 float (C언어)
배정밀도(Double Precision) 64비트 약 15~17자리 double (C언어)
확장 정밀도(Extended Precision) 80비트 이상 고정밀 연산 일부 CPU

단정밀도(32비트)는 메모리를 절약하면서 빠른 연산 수행

배정밀도(64비트)는 더 높은 정확도를 제공


2.2 IEEE 754 부동소수점 형식

IEEE 754 표준에서 부동소수점은 부호(Sign), 지수(Exponent), 가수(Mantissa)로 구성됩니다.

비트 필드 설명 단정밀도 (32비트) 배정밀도 (64비트)
부호(Sign) 양수(0), 음수(1) 1비트 1비트
지수(Exponent) 2의 지수 값 8비트 (127 기준) 11비트 (1023 기준)
가수(Mantissa) 유효숫자 23비트 52비트

💡 IEEE 754 단정밀도 32비트 표현 (예제: 10진수 12.375)

1비트   |   8비트 지수  |  23비트 가수
------------------------------------------------
0       |   10000010   |  10001000000000000000000


2.3 IEEE 754 부동소수점 변환 과정

부동소수점 숫자를 IEEE 754 형식으로 변환하는 과정은 다음과 같습니다.

🔹 예제: 10진수 12.375 → IEEE 754 변환 (단정밀도 32비트)

1️⃣ 10진수를 2진수로 변환

12.375(10) = 1100.011(2)

2️⃣ 정규화(Normalization)

1.100011 × 2³

3️⃣ 부호(Sign) 결정

  • 양수이므로 Sign = 0

4️⃣ 지수(Exponent) 계산 (Bias 적용)

  • Bias = 127 (단정밀도)
  • 3 (지수) + 127 = 130 (10000010₂)

5️⃣ 가수(Mantissa) 설정

  • 소수점 이후의 비트만 저장 → 10001100000000000000000

💡 최종 IEEE 754 표현 (32비트)

0 10000010 10001100000000000000000

정규화(Normalization) 과정을 거쳐 IEEE 754 형식으로 변환됨


🔹 3. 부동소수점 연산 방식

부동소수점 연산은 정수 연산보다 복잡하고 오차가 발생할 가능성이 높음.

CPU는 부동소수점 연산을 수행할 때 FPU(Floating Point Unit) 를 사용하여 최적화된 연산을 수행합니다.

3.1 부동소수점 덧셈 & 뺄셈

1️⃣ 지수를 맞추기 위해 작은 수를 Shift

2️⃣ Mantissa(가수) 부분을 덧셈 또는 뺄셈 수행

3️⃣ 결과를 정규화하여 IEEE 754 형식 유지

💡 예제: 1.25 + 0.75 (IEEE 754 단정밀도)

1.25 = 1.010 × 2⁰
0.75 = 1.100 × 2⁰
------------------
         11.000 × 2⁰  →  정규화 후 1.100 × 2¹

지수를 맞춘 후 덧셈 수행, 결과 정규화 필요


3.2 부동소수점 곱셈 & 나눗셈

곱셈(Multiplication)

  • 가수를 곱하고, 지수를 더함

나눗셈(Division)

  • 가수를 나누고, 지수를 뺌

💡 부동소수점 연산은 정수 연산보다 느리며, 하드웨어적으로 최적화가 필요함


🔹 4. 부동소수점 연산의 한계와 문제점

부동소수점 연산은 정확성이 필요한 경우 반올림 오류(Rounding Error), 오버플로우(Overflow), 언더플로우(Underflow) 문제가 발생할 수 있습니다.

문제 유형 설명 예제
반올림 오류 (Rounding Error) IEEE 754에서 표현할 수 없는 값이 발생 0.1 + 0.2 ≠ 0.3
오버플로우 (Overflow) 표현할 수 있는 최대값을 초과 10³⁰⁰
언더플로우 (Underflow) 너무 작은 수를 표현할 수 없음 10⁻³⁰⁰

💡 해결 방법:

  • Kahan Summation Algorithm 사용하여 반올림 오류 최소화
  • 소프트웨어적으로 다중 정밀도 연산(BigFloat) 활용

✅ 마무리: IEEE 754 부동소수점 연산 핵심 정리

부동소수점은 지수(Exponent)와 가수(Mantissa)를 이용하여 실수를 표현

IEEE 754 표준은 단정밀도(32비트), 배정밀도(64비트)로 구분됨

연산 과정에서 반올림 오류, 오버플로우, 언더플로우 문제가 발생할 수 있음

FPU와 SIMD 명령어(SSE, AVX)를 활용하여 성능 최적화 가능

반응형