모듈을 사용한 덧셈 연산

점프 투 파이썬의 5장의 모듈을 공부하다가 의문점이 생겨서 질문을 남깁니다.

클래스나 변수 등을 포함한 모듈 파트를 학습하는데 마지막을 보면 mod2.py 에 있는 add함수를 사용하는 방법에 대해서 나온 부분이 있습니다.

print(mod2.add(mod2.PI, 4.4))

위 코드를 실행했을 때 결과로 교재에는 7.541592 라는 값이 나오는데 실제로 코드를 실행해보면 7.5415920000000005 라는 값이 출력됩니다. 분명 모듈의 PI변수에는 3.141592 로 소수점 6번째 자리까지만 입력을 했는데 결과에 추가로 붙은 0000000005 는 어떤 과정을 거쳐서 생성된 값인지 궁금합니다.

MrKeepLearning 437

2021년 1월 22일 2:29 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

안녕하세요.

위와같이 되는 이유는 이진수 기반의 파이썬 float 연산은 경우에 따라 미세한 오차가 발생할 수 있기 때문입니다.

다음과 같은 오차가 있습니다.

>>> 0.1 * 3
0.30000000000000004
>>> 1.2 - 0.1
1.0999999999999999
>>> 0.1 * 0.1
0.010000000000000002
>>>

그래서 오차를 없애려면 다음처럼 decimal.Decimal을 사용해야 합니다.

>>> from decimal import Decimal
>>> Decimal('0.1') * 3
Decimal('0.3')
>>> Decimal('1.2') - Decimal('0.1')
Decimal('1.1')
>>> Decimal('0.1') * Decimal('0.1')
Decimal('0.01')

도움이 되셨기를 바랍니다.

박응용

M 2021년 1월 22일 6:44 오후

감사합니다! 많은 도움이 되었습니다^^ - MrKeepLearning님, 2021년 1월 23일 10:06 오전 추천 , 대댓글