문제의 원인

이 문제는 부동소수점 숫자를 표현하는 방식 때문에 발생합니다. 컴퓨터에서 부동소수점 숫자는 이진수로 표현됩니다. 이진수로 표현된 소수는 종종 무한 소수가 될 수 있기 때문에, 컴퓨터는 이진수에서 유한한 비트 수만큼만 표현합니다.

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.11.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

+ Recent posts