在处理浮点错误时,我发现了pyth数学模型的isclose 方法。此方法使用以下公式计算a和b之间的相对epsilon:
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位内是不准确的。但是,由于相对epsilon比1e-06稍大,这就是区别,它返回true。我在几个地方见过这个相对的epsilon公式,但从来没有解释过为什么使用它。我希望了解为什么这个公式是可以接受的,以及如何将它应用到我对isclose的使用中。谢谢
发布于 2020-05-14 01:35:19
你可能混淆了差异和相对宽容。
你说得对,a和b之间的区别是1e-6,这两个数字是相同的,只有在小数位的第六位,,。
但是,Python文档讨论的是十进制数字,它包含句号之前的数字。因此,这两个数字与9十进制数字也是相同的。
使用相对公差而不是差异的原因在处理小数字时很容易看出。如果你所有的数字都小于1e-10,并且我们要使用差分,我们永远不能比较两个浮动数字。但是,如果使用相对公差,则可以更好地度量两个浮点数之间的“相对距离”。
关于isclose的有用性,一个例子可以是传感器测量。如果编写了等待信号设置为浮点值的代码,则不希望测试测量值是否等于所需的值,因为由于舍入错误,它可能永远不会发生,而是等待度量值接近所需值。
希望它能帮上忙
https://stackoverflow.com/questions/61787274
复制相似问题