컴퓨터는 실수를 이진수로 표현하기 위해, 주로 IEEE 754라는 표준을 사용합니다.
이 표준에 따라 숫자는 다음과 같은 형태로 표현됩니다.

예) 10진수 5.25는 이진수로 101.01이며 부동소수점 표현으로는
컴퓨터는 무한한 정밀도로 실수를 저장할 수 없습니다. 정밀도가 제한된 이진수로 표현하면서 근사값을 사용하게 되고, 이로 인해 정확한 숫자가 아닌 근사한 숫자가 저장됩니다.
컴퓨터가 사용하는 2진법으로는 10진수의 일부 숫자들을 정확하게 표현할 수 없습니다.
예를 들어:

예시) python
print(0.1 + 0.2)
# 출력: 0.30000000000000004
부동소수점은 정밀도가 제한되어 있기 때문에 매우 크거나 매우 작은 수를 저장할 때 반드시 오차가 발생합니다.
대표적으로:
정밀도 이상의 숫자는 반올림(rounding) 되며, 오차가 누적될 수 있습니다.
연산이 반복될 경우 반올림 오차(round-off error) 가 점점 커질 수 있습니다.
예를 들어, 매우 작은 수와 큰 수를 더할 때:
a = 1e20
b = 1.0
print(a + b) # 출력: 1e20 (b는 반영되지 않음)
print(0.1 + 0.2 == 0.3) # False
print(1.1 + 2.2) # 3.3000000000000003
부동소수점 오차 자체를 완벽히 없앨 수는 없지만, 줄이거나 회피하는 방법은 있습니다.
print(round(0.1 + 0.2, 10)) # 0.3
금융 계산처럼 정확도가 중요할 때, 화폐 단위로 바꿔 정수로 계산합니다.
예를 들어 0.1원을 계산할 때,→ 0.1원을 10전으로 바꾸어 정수로 계산 후, 다시 원 단위로 복귀.
amount1 = 10 # 0.10원 → 10전
amount2 = 20 # 0.20원 → 20전
print((amount1 + amount2)/100) # 정확히 0.3원
예시 (Python의 Decimal 라이브러리):
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 정확히 0.3
부동소수점 오차는 컴퓨터가 실수를 이진수 형태로 유한한 비트 수로 표현하는 과정에서 필연적으로 발생하는 정밀도의 한계 때문입니다.