舍入误差
罗兰最近发布了一个简单的例子单线程计算可能会产生与多线程计算不同的结果. 原因是浮点四舍五入,大多数人惊讶地发现“不同”的结果实际上是一致的!在这篇文章中,我想在Simulink中探讨同样的例子。万博1manbetx
操作顺序很重要
Loren的示例表明,从以下等式得到的答案取决于执行操作的顺序:
1e-16+1e-16+1e30-1e30
以下是用Simulink块表示的相同方程式。该模型没有明确指定操作顺序,因此它万博1manbetx们是从第一个输入到最后一个输入(从上到下,即((1e-16+1e-16)+1e30)-1e30).
这是一个具有不同附加分组的相同等式,其中每个运算符的输入都是相同幅度的信号。
(1e-16+1e-16)+(1e30-1e30)
在另一组中,运算符的输入具有非常不同的大小。
(1e-16+1e30)+(1e-16-1e30)
我喜欢这些示例,因为它们显示了浮点舍入如何影响结果。这些计算的一个重要方面是一定数量的浮点数之间的间隔。EPS命令提供一个数字和下一个浮点精度数字之间的差值。1e30的EPS是什么?
>>每股收益(1e30)
ans=
1.4074e+014
考虑到周围浮点数的间距1e30远大于1e-16,您可以解释为什么对这些操作的顺序敏感。对于任何普通浮点数X,如果添加少于一半的EPS(X),则结果不会有任何差异。
>>1e30+7e13==1e30
ans=
1.
>>1e30+8e13==1e30
ans=
0
这对我有什么影响?
设想一个模型,其中结果的精度是一个关键考虑因素。有关参数单位和操作顺序的选择可能会影响计算精度,特别是在使用更紧凑的数字表示法(如单精度浮点)时。
现在轮到你了
你有没有遇到过一个奇怪的结果,却发现它在浮点错误的范围内?请与我们分享你的经验评论这里.
评论
如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。