首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Python相对Epsilon

理解Python相对Epsilon
EN

Stack Overflow用户
提问于 2020-05-14 00:40:27
回答 1查看 315关注 0票数 1

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

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

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

让我们考虑下面的例子..。

代码语言:javascript
复制
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的使用中。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 01:35:19

你可能混淆了差异和相对宽容。

你说得对,a和b之间的区别是1e-6,这两个数字是相同的,只有在小数位的第六位,

但是,Python文档讨论的是十进制数字,它包含句号之前的数字。因此,这两个数字与9十进制数字也是相同的。

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

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

希望它能帮上忙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61787274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档