당당한 프로그래밍/파이썬

[Python] 실수(float) 연산 후, 대소 비교

당당한하수 2022. 5. 13. 16:35

Python은 부동소수점 방식으로 표현하기 때문에, 실수 연산의 결과에 작은 오차가 생긴다(근사치를 사용)

일반적으로는 큰 문제가 없지만, 조건문을 사용할 때 아래와 같은 문제가 발생할 수 있다.

x = 0.1 + 0.2
# x = 0.300000000000004

if x == 0.3:
    print("Same")
else:
	print("Diff")
# Diff

# solution
import sys

small_val = sys.float_info.epsilon
if abs(x) - 0.3 < small_val:
    print("Same")
else:
	print("Diff")
# Same

시스템에서 사용하는 작은 값을 하나 선언하고, 그 값을 이용해서 동일한지를 판단할 수 있다.