Python 中的近似浮点相等:标准库函数来救援
人们普遍认为,比较浮点是否精确相等可能会出现问题,因为由于浮点精度限制,简单的相等性检查变得不可靠。我们如何在 Python 中克服这一挑战?
Python 的内置解决方案
Python 3.5 版本为此引入了两个基本函数:math.isclose 和 cmath.isclose 。这些函数(如 PEP 485 中所定义)可以对浮点数进行稳健比较,同时考虑与精度相关的差异。
isclose 函数
isclose 函数采用三个参数:
rel_tol 表示相对于允许的偏差百分比a 和 b 的大小。另一方面,abs_tol 是一个无论大小都必须满足的绝对阈值。
容差注意事项
该函数比较 a 和 b 之间的绝对差rel_tol * max(|a|, |b|) 和 abs_tol。如果差异小于这些值中的任何一个,则浮点数被视为相等。
早期 Python 版本的等效实现
对于 3.5 之前的 Python 版本,等效的实现函数可以定义如下:
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
利用此函数可以让您自信地比较浮点数是否近似相等,在 Python 中处理数值数据时这是非常宝贵的工具。
以上是如何在 Python 中可靠地比较浮点数是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!