了解Python相对Epsilon

问题描述 投票:0回答:1

在处理一个浮点错误时,我发现了pyth math moduel的 isclose 办法. 该方法计算了以下几个方面的相对epsilon 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位以内不准确。 但是,由于相对epsilon略微比不上 1e-06,这就是区别,它返回 true. 我在一些地方看到过这个相对epsilon公式,但从来没有解释过为什么要使用它。 我希望了解为什么这个公式是可以接受的,以及我如何将其应用到我的使用中。isclose. 谢谢你

python python-3.x math floating-point floating
1个回答
1
投票

你可能混淆了差值和相对公差。

你是对的,a和b之间的差值是1e-6,这两个数字只有到第六位才是相同的。小数位.

然而,Python文档说的是 小数 其中包含了句号前的数字。因此,这两个数字对第9个数字也是一样的。小数.

当你处理小数时,用相对容差而不是差值的原因很容易理解。如果你所有的数字都小于1e-10,而我们要用差值,我们永远无法比较两个浮点数。但是如果你使用相对容差,你就可以更好地衡量两个浮点数之间的 "相对距离"。

关于isclose的有用性,一个例子可以是传感器测量。如果你写了一段代码,等待信号沉降到一个浮点值,你不想测试测量值是否等于期望值,因为由于四舍五入的误差,它可能永远不会发生,而是等待测量值接近期望值。

希望对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.