在Python中,比较float与几乎相等的最佳方法是什么?

2024-04-25 17:01:21 发布

您现在位置:Python中文网/ 问答频道 /正文

众所周知,由于舍入和精度问题,比较浮点数是否相等有点麻烦。

例如: https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

在Python中,建议如何处理此问题?

肯定有一个标准的库函数来实现这个功能吗?


Tags: https功能com标准wordpress精度建议point
3条回答

我同意Gareth的答案可能是最合适的轻量级功能/解决方案。

但是我认为如果您正在使用或者正在考虑使用NumPy,有一个打包的函数来实现这一点会很有帮助。

numpy.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

不过,有一点免责声明:根据您的平台,安装NumPy可能是一个非常重要的体验。

Python 3.5添加了^{} and ^{} functions,如PEP 485中所述。

如果您使用的是早期版本的Python,那么documentation中给出了等效的函数。

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)

rel_tol是一个相对公差,它乘以两个参数的较大值;随着值变大,它们之间允许的差异也会变大,同时仍然认为它们相等。

abs_tol是一种绝对耐受性,适用于所有情况。如果差值小于这些公差中的任何一个,则认为这些值相等。

像下面这样简单的东西还不够好吗?

return abs(f1 - f2) <= allowed_error

相关问题 更多 >