[자바개발자의 파이썬도전기 - 2] 실수 계산, epsilon

Coen·2022년 12월 7일
1

python

목록 보기
3/15
post-thumbnail

JAVA 개발자의 PYTHON 도전기

이 포스트는 개인적으로 공부한 내용을 정리한 글입니다.
자세한 내용은 아래 참고자료를 봐주시면 감사하겠습니다.

기본 문법

실수 계산

>>> 4.3 + 2.7
7.0
>>> 4.3 - 2.7
1.5999999999999996
>>> 1.5 * 3.1
4.65
>>> 5.5 / 3.1
1.7741935483870968

실수의 뺄셈인 4.3 - 2.7 의 계산결과가 우리의 생각과는 괴리가 있습니다.

>>> 0.1 + 0.2
0.30000000000000004

0.1 + 0.2 의 계산 결과도 우리의 생각과 다른데, 이는 파이썬이 실수를 부동소수점 방식으로 표현하기 때문입니다.
부동소수점은 실수를 정확히 표현할 수 없는 문제가 있습니다.

따라서 실수를 아래와 같이 비교를 한다면 같지 않다고 나옵니다.

>>> 0.1 + 0.2 == 0.3
False

그럼 어떻게 비교해야할까?

>>> import math, sys
>>> x = 0.1 + 0.2
>>> x
0.30000000000000004
>>> math.fabs(x - 0.3)
5.551115123125783e-17
>>> math.fabs(x - 0.3) <= sys.float_info.epsilon
True

여기서 sys.float_info.epsilon에 저장된 값을 머신 엡실론(machine epsilon)이라고 부르는데, 어떤 실수를 가장 가까운 부동소수점 실수로 반올림했을 때 상대 오차는 항상 머신 엡실론 이하입니다. 즉, 머신 엡실론은 반올림 오차의 상한값이며 연산한 값과 비교할 값의 차이가 머신 엡실론보다 작거나 같다면 두 실수는 같은 값이라 할 수 있습니다.
참고자료 (파이썬 코딩 도장)

라고 합니다.

>>> import math
>>> math.isclose(0.1 + 0.2, 0.3)
True

위의 방법을 사용하면 더 간단하게 비교가 가능합니다.

참고자료 (파이썬 코딩 도장 - 5.2 실수 계산하기)

참고자료 (파이썬 코딩 도장 - 47.7 실수 값의 오차)

profile
백엔드 프로그래머

0개의 댓글