在Python中,比较almostequality的浮点值的最佳方法是什么?

2024-09-24 00:28:11 发布

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

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

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

在Python中,建议采用什么方法来处理此问题

这里肯定有一个标准的库函数吗


Tags: 方法httpscom标准wordpress精度建议point
3条回答

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是一种绝对耐受性,适用于所有情况。如果差值小于这些公差中的任何一个,则认为这些值相等

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

但我认为,如果您正在使用或正在考虑使用NumPy,那么需要注意的是,有一个用于此功能的打包函数

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

不过有一点免责声明:根据您的平台,安装NumPy可能是一次不平凡的体验

像下面这样简单的事情还不够好吗

return abs(f1 - f2) <= allowed_error

相关问题 更多 >