모듈을 사용한 덧셈 연산
점프 투 파이썬의 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 오후