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