print(0.1 + 0.2)
위 코드의 결과를 우리는 0.3 을 예상한다.
하지만 실제로는 0.30000000000000004 라는 기괴한 값이 나온다.
이것은 컴퓨터가 '부동 소수점' 이라는 방식을 채택하고 있기 때문이다.
부동 소수점(floating point) 방식이란 실수를 컴퓨터 상에서 표현할 때 근사하는 방식의 하나로, 컴퓨터 상에서 넓은 범위의 수를 나타내는데 유리하지만 실수를 정확히 표현할 수 없다는 단점이 있다. 단, 실제 값과의 차이가 항상 10의 -15제곱(시스템에 따라 약간 다를 수 있다)보다 작게 되므로 소수점 특정 자리수 까지만 비교하면 된다.
컴퓨터는 실수를 저장할 때 값을 그대로 저장하는 것이 아니라, '부동 소수점 방식'이란 것을 통해 근삿값을 저장한다. 그러다 보니, 0.1의 근삿값과 0.2의 근삿값이 나오고, 그 두 개를 더한 값을 표현하다 보니 0.30000000000000004 라는 값이 나온 것이다.
print(0.3 - (0.1 + 0.2))
위 코드의 결과가 -5.551115123125783e-17 인데, 0 과의 차이가 10의 -15제곱 미만인 것을 알 수 있다. 10의 -15제곱 이하의 미미한 차이는 무시해도 될 정도이다.