문제의 원인
이 문제는 부동소수점 숫자를 표현하는 방식 때문에 발생합니다. 컴퓨터에서 부동소수점 숫자는 이진수로 표현됩니다. 이진수로 표현된 소수는 종종 무한 소수가 될 수 있기 때문에, 컴퓨터는 이진수에서 유한한 비트 수만큼만 표현합니다.
1.1과 0.1은 이진수로 정확히 표현할 수 없는 무한 소수입니다. 따라서 컴퓨터에서 이 값들은 근사치로 표현됩니다.
따라서 **1.1 + 0.1**은 컴퓨터에서는 **1.2000000000000002**와 같은 값을 가질 수 있습니다. 이는 **1.2**와 같지 않으므로, **1.1 + 0.1 == 1.2**가 False가 됩니다.
해결 방법
이러한 문제를 해결하기 위해, 부동소수점 숫자를 비교할 때는 약간의 오차를 허용해야 합니다. 즉, "1.1 + 0.1이 1.2와 거의 같다"라는 식으로 비교해야 합니다. 일반적으로는 다음과 같은 방법을 사용합니다.
import math
tolerance = 1e-10
if math.isclose(1.1 + 0.1, 1.2, rel_tol=tolerance):
print("approximately equal")
else:
print("not approximately equal")
위 코드는 math.isclose()함수를 사용하여 1.1 + 0.1과 1.2가 "거의 같은" 값인지 확인합니다. 이 함수는 두 숫자가 동일하거나(rel_tol=0), 혹은 상대 오차(rel_tol) 혹은 절대 오차(abs_tol) 안에 있는 경우 True를 반환합니다. 위 코드에서는 상대 오차를 사용하여 비교합니다.
'개발' 카테고리의 다른 글
AWS STS와 Assume Role (3) | 2023.03.14 |
---|---|
React useEffect 예제 (0) | 2023.03.14 |
flex 화면이 레이어 아래로 내려 갈수 있게 (0) | 2014.10.08 |
유용한 사이트 모음 (0) | 2014.06.26 |