반응형
Decimal, Fraction, float 세 가지 실수 표현 방식
아래에 Decimal, Fraction, float 세 가지 실수 표현 방식의 차이점과 혼합 연산 시 주의점을 정리해드릴게요.
✅ 1. 세 가지 실수 표현 방식 비교
| 항목 | float | Decimal | Fraction |
| 표현 방식 | 이진 부동소수점 | 십진 고정소수점 | 정수 분수 (a/b) |
| 정밀도 | 부정확 (오차 존재) | 매우 정확 (사용자 설정 가능) | 무한 정밀도 |
| 연산 속도 | 빠름 | 느림 | 가장 느림 |
| 용도 | 일반 계산용 | 금융·세무 계산 | 수학/정수론/기하 정확도 |
| 예시 | 0.1 + 0.2 != 0.3 | Decimal('0.1') + Decimal('0.2') == Decimal('0.3') | Fraction(1, 3) = 정확히 1/3 |
✅ 2. 타입 혼합 연산 가능 여부
| 연산 | 가능 여부 | 설명 |
| float + float | ✅ | 일반 실수 연산 |
| Decimal + int | ✅ | 자동 형변환 |
| Decimal + float | ❌ | 오류 발생 (TypeError) |
| Decimal + Decimal | ✅ | 정확한 십진 연산 |
| Fraction + int | ✅ | 자동 변환 |
| Fraction + float | ❌ | 오류 또는 의도치 않은 결과 |
| Fraction + Fraction | ✅ | 수학적으로 정확 |
✅ 3. 사용 시 주의사항
🧨 잘못된 예
from decimal import Decimal
a = Decimal('1.1')
a + 2.2 # ❌ float와 혼합 → TypeError
✅ 올바른 방법
a + Decimal('2.2') # ✅ 정확한 Decimal 연산
✅ 4. 추천 사용 가이드
| 상황 | 추천 타입 | 이유 |
| 일반 수학/공학 계산 | float | 속도와 호환성 |
| 금융·회계·소수점 정확성 | Decimal | 0.01 단위 정확도 보장 |
| 수학적 분수 계산 | Fraction | 유리수로 완전 표현 가능 |
'재밌는 수학 퀴즈와 문제' 카테고리의 다른 글
| 정밀도 설정 (getcontext().prec)의 계산 결과 (1) | 2025.04.28 |
|---|---|
| float, Decimal, Fraction의 상대적인 특성(정밀도, 속도, 사용 편의성) (1) | 2025.04.27 |
| 파이썬의 decimal.Decimal 클래스를 사용한 정밀한 실수 연산 (1) | 2025.04.24 |
| fractions.Fraction 모듈을 활용한 정확한 분수 계산 (0) | 2025.04.23 |
| 복소수의 시각화 (2) | 2025.04.22 |