>  기사  >  백엔드 개발  >  Python의 부동 소수점 수의 원리와 작동에 대한 자세한 설명

Python의 부동 소수점 수의 원리와 작동에 대한 자세한 설명

黄舟
黄舟원래의
2017-10-12 10:56:443148검색

이 글에서는 주로 Python 부동소수점 연산의 원리와 연산 분석을 소개하고, Python 부동소수점 연산에서 흔히 발생하는 오류를 예제 형식으로 분석하고, 부동소수점 연산의 원리와 비교연산 구현 방법을 간략하게 설명합니다. 다음

이 문서의 예제에서는 Python의 부동 소수점 숫자의 원리와 작동을 설명합니다. 다음과 같이 참고할 수 있도록 모든 사람과 공유하세요.

먼저 직관에 반하는 예를 살펴보세요:


>>> s = 0.
>>> for i in range(10): s += .1
>>> s
0.9999999999999999
# 错误被累加

그런 다음 판단 논리에 직접적으로 영향을 미치는 보다 일반적인 예를 살펴보세요.


>>> from math import sqrt
>>> a = sqrt(2)
>>> a*a == a
False

그 이유 위의 결과는 Python(더 정확하게는 컴퓨터 하드웨어 아키텍처)에 의한 부동 소수점 숫자의 표현에 있습니다. 십진수를 십진수로 변환하는 방법에 대해서는 이진수를 기반으로 합니다. 이진 소수에 대해서는 Python Decimal을 참조하세요. 소수를 이진 소수로 변환하거나 그 반대로 변환하세요. 10진수 0.1을 2진수로 변환하면 결과는 0.0001100110011001....입니다. 이는 무한 루프입니다. 컴퓨터는 무한한 결과를 표시할 수 없으며 결과를 자를 수만 있습니다. 이것이 부동 소수점 정밀도 문제의 근원입니다.

"==" on floats

위의 고려 사항을 바탕으로 부동 소수점 숫자의 동등 비교를 수행할 때 ==를 직접 사용하는 것은 특히 주의해야 합니다. 부동 소수점 숫자가 같은지 테스트하는 것은 충분히 가까운지 테스트합니다.


>>> a = sqrt(2)
>>> abs(a*a-2) < epsilon
# 判断是否小于某一小量

위 내용은 Python의 부동 소수점 수의 원리와 작동에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.