2024-09-24 00:28:11 发布
网友
众所周知,由于舍入和精度问题,比较浮点数是否相等有点麻烦
例如: https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
在Python中,建议采用什么方法来处理此问题
这里肯定有一个标准的库函数吗
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是一个相对公差,它乘以两个参数的较大值;当值变大时,它们之间允许的差值也会变大,同时仍然认为它们相等
rel_tol
abs_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
Python 3.5添加了^{} and ^{} functions ,如PEP 485中所述
如果您使用的是早期版本的Python,那么documentation中给出了等效函数
rel_tol
是一个相对公差,它乘以两个参数的较大值;当值变大时,它们之间允许的差值也会变大,同时仍然认为它们相等abs_tol
是一种绝对耐受性,适用于所有情况。如果差值小于这些公差中的任何一个,则认为这些值相等我同意Gareth的答案可能最适合作为轻量级功能/解决方案
但我认为,如果您正在使用或正在考虑使用NumPy,那么需要注意的是,有一个用于此功能的打包函数
不过有一点免责声明:根据您的平台,安装NumPy可能是一次不平凡的体验
像下面这样简单的事情还不够好吗
相关问题 更多 >
编程相关推荐