在处理浮点错误时,我发现了pyth数学模型的isclose
method。此方法使用以下公式计算a
和b
之间的相对ε:
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
的使用中。多谢各位
您可能混淆了差异和相对公差
a和b之间的差值为1e-6,这两个数字仅在小数点后第六位相同,这是对的
然而,Python文档讨论的是小数位数,它包含句点之前的数字。因此,这两个数字也与第9位小数相同
在处理小数字时,使用相对公差而不是差异的原因很容易看出。若你们所有的数字都小于1e-10,并且我们要使用差分,那个么我们永远无法比较两个浮点数。但如果使用相对公差,则可以更好地度量两个浮点数之间的“相对距离”
关于isclose的有用性,传感器测量就是一个例子。如果您编写的代码等待信号稳定为浮点值,则不希望测试测量值是否等于所需值,因为由于舍入误差可能永远不会发生,而是等待测量值接近所需值
希望能有帮助
相关问题 更多 >
编程相关推荐