이 글에서는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!