✅ 고정 소수점 (Fixed-Point)
소수점의 위치를 고정시켜 실수를 표현하는 방식이다.
🧩 구조 (32비트 기준)
32비트 기준 고정 소수점은 다음과 같이 비트를 사용하여 표현한다:
- 1비트: 부호
- 15비트: 정수부
- 16비트: 소수부
💡 예시: 9.6875의 표현
9.6875 → 0000 0000 0000 1001.1011 0000 0000 0000
소수부 변환 과정 (2진수로 * 2 반복):
0.6875 * 2 = 1.375 → 1
0.375 * 2 = 0.75 → 0
0.75 * 2 = 1.5 → 1
0.5 * 2 = 1.0 → 1
→ 소수부: 0.1011
✅ 장단점
장점 | 단점 |
---|---|
계산이 간단 (고정 포맷) | 정밀도/표현 범위가 좁음 |
하드웨어 구현이 쉬움 | 오차가 빠르게 커질 수 있음 |
✅ 부동 소수점 (Floating-Point)
고정 소수점보다 더 넓은 범위와 정밀도를 표현할 수 있도록 설계된 실수 표현 방식이다.
🔸 정규화(Normalization)
실수의 가수부를 1.xxxx 형태로 정규화하고, 지수부를 통해 자릿수 이동을 표현하는 과정이다.
🔹 예시 (2진수 정규화)
-11.4₁₀ → -1011.0110 0110 0110…₂
→ -1.01101100110… × 2³
🧮 IEEE 754 표준 구조 (단정도, 32비트)
구성 | 비트 수 | 설명 |
---|---|---|
부호 (Sign) | 1비트 | 양수: 0 / 음수: 1 |
지수 (Exponent) | 8비트 | Bias: 127 |
가수 (Mantissa) | 23비트 | 앞의 1은 생략 (암묵적 1) |
이때, 지수 값 0과 255는 비정규화 수/특수값(NaN, ±∞)에 사용된다.
실제 유효 지수 범위: 1~254 → 실제 지수: -126 ~ +127
📌 예시: -11.4를 IEEE 754 단정도로 표현
- 정규화:
1.0110110011… × 2³
- 부호 비트:
1
- 지수 비트:
3 + 127 = 130
→10000010₂
- 가수 비트:
01101100110011001100110
(23비트로 자름)
✅ 최종 결과:
1 10000010 01101100110011001100110
→ 11000001 00110110 01100110 01100110
📏 배정도(Double-Precision, 64비트)
항목 | 설명 |
---|---|
부호 비트 | 1비트 |
지수 비트 | 11비트 (Bias: 1023) |
가수 비트 | 52비트 |
⚠️ 실수 비교 시 주의
부동 소수점은 근사값이기 때문에, 다음과 같은 비교는 정확하지 않다:
if (a == b) { ... } // 부정확!
✔ 권장 방식
if (fabs(a - b) < 1e-6) { ... } // 오차 범위 내 비교
✅ 고정 vs 부동 소수점 비교
항목 | 고정 소수점 | 부동 소수점 |
---|---|---|
계산 속도 | 빠름 | 상대적으로 느림 |
표현 범위 | 좁음 | 넓음 |
정밀도 | 낮음 | 높음 |
하드웨어 구현 | 간단 | 복잡 |
사용 예 | 임베디드, DSP | 일반적 실수 계산, 과학 연산 |
🔗 참고
'프로그래밍 언어 > C' 카테고리의 다른 글
06. 구조체 (Struct) (0) | 2025.06.30 |
---|---|
05. 함수 포인터 (Function pointer)와 void 포인터 (0) | 2025.06.27 |
04. 포인터와 문자열 (2) | 2025.06.26 |
03. 자료형 변환 (Type casting) (0) | 2025.06.24 |
02. 상수(Constant) (0) | 2025.03.31 |