在Python 3.5(和numpy的),你可以使用isclose
阅读描述它的PEP 485,Python 3.5数学library listing和numpy.isclose的更多信息。 numpy版本适用于支持numpy的所有Python版本。
实例:
>>> from math import isclose
>>> isclose(1,1.00000000001)
True
>>> isclose(1,1.00001)
False
的相对和绝对容差可以改变。
相对误差可以被认为是+ - 一个两个值之间的百分比:
>>> isclose(100,98.9, rel_tol=0.02)
True
>>> isclose(100,97.1, rel_tol=0.02)
False
绝对宽容是两个值之间的绝对值。它与abs(a-b)<=tolerance
的测试相同
Python的所有数字类型都支持Python 3.5版本。 (使用复杂的cmath
版本)
我认为长期来看,这是您更好的数字选择。对于较老的Python,只需导入源代码。有一个Github版本。
或者,(放弃错误检查和inf
和NaN
支持),您可以只使用:
def myisclose(a, b, *, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
对于那个isclose GitHub库+1。正如他们所说的:他们为了确切的平等而短路,但如果不是严格的平等,那么就会进行更仔细的检查。这正是我所想的(即使处理复杂的类型)。 – denvar