在 Python 3.5(和 Numpy)中,您可以使用isclose
阅读描述它的PEP 485、Python 3.5 数学库列表和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 3.5 版本支持所有数字类型的 Python。(使用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 )