理解Python相对ε

2024-06-16 10:35:46 发布

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

在处理浮点错误时,我发现了pyth数学模型的isclosemethod。此方法使用以下公式计算ab之间的相对ε:

max(rel_tol * max(abs(a), abs(b))

默认情况下,rel_tol设置为1e-09。根据文档,这“确保两个值在大约9位小数内相同。”

让我们考虑下面的例子…

a=1234.000001
b=1234

# the relative epsilon, as calculated with the above formula, would be 0.000001234000001
# so math.isclose returns true
math.isclose(a,b)

根据文档,这似乎应该是false,因为它在小数点后第9位内不准确。但由于相对ε略大于1e-06,这就是差异,它返回true。我在一些地方见过这个相对ε公式,但从来没有解释过为什么使用它。我希望了解为什么这个公式是可以接受的,以及如何将它应用到我对isclose的使用中。多谢各位


Tags: the文档true错误mathabsmax公式
1条回答
网友
1楼 · 发布于 2024-06-16 10:35:46

您可能混淆了差异和相对公差

a和b之间的差值为1e-6,这两个数字仅在小数点后第六位相同,这是对的

然而,Python文档讨论的是小数位数,它包含句点之前的数字。因此,这两个数字也与第9位小数相同

在处理小数字时,使用相对公差而不是差异的原因很容易看出。若你们所有的数字都小于1e-10,并且我们要使用差分,那个么我们永远无法比较两个浮点数。但如果使用相对公差,则可以更好地度量两个浮点数之间的“相对距离”

关于isclose的有用性,传感器测量就是一个例子。如果您编写的代码等待信号稳定为浮点值,则不希望测试测量值是否等于所需值,因为由于舍入误差可能永远不会发生,而是等待测量值接近所需值

希望能有帮助

相关问题 更多 >