人在仿真软件金宝app

金宝appSimulink &基于模型的设计

舍入误差

罗兰最近发布了一个简单的例子单线程计算可能与多线程计算产生不同的结果.原因是浮点四舍五入,大多数人惊讶地发现“不同”的结果实际上是一致的!在这篇文章中,我想在Simulink中探索这个相同的例子。金宝app

操作顺序很重要

罗兰的例子表明,你从下列方程得到的答案取决于你执行操作的顺序:

1e-16 + 1e-16 + 1e30 - 1e30

这里是用Simulink块表示的相同的方程。金宝app模型没有明确指定操作的顺序,所以它们是从第一个输入到最后一个输入(从上到下,即((1e-16 + 1e-16) + 1e30) - 1e30).

金宝appSimulink模型用一个矩形和块添加4个值

这里是同一个方程,只是用了不同的括号分组,其中每个运算符的输入都是相同大小的信号。

(1e-16 + 1e-16) + (1e30 - 1e30)

金宝appSimulink模型用3个和块添加相似大小的值

在另一组中,对操作符的输入有非常不同的大小。

(1e-16 + 1e30) + (1e-16 - 1e30)

金宝app在Simulink模型中添加不同大小的值

我喜欢这些例子,因为它们展示了浮点四舍五入对结果的影响。这些计算需要考虑的一个重要方面是特定大小的浮点数之间的间距。EPS命令提供一个数字与下一个浮点精度数字之间的差值。1e30的每股收益是多少?

> > eps (1 e30)
ans =
1.4074 e + 014

考虑到浮点数周围的间距1 e301 e-16,你可以知道为什么这些操作的顺序是敏感的。对于任何普通浮点数X,如果添加不到一半的EPS(X),结果不会有什么不同。

>> 1e30 + 7e13 == 1e30
ans =
1
>> 1e30 + 8e13 == 1e30
ans =
0

这对我有什么影响呢?

设想一个模型,其中结果的准确性是一个关键考虑因素。参数单位和操作顺序的选择可能会影响计算的精度,特别是在使用更紧凑的数字表示形式(如单精度浮点数)时。

现在轮到你了

您是否曾经遇到过一个奇怪的结果,却发现它在浮点错误的范围内?与我们分享你的经验这里的评论

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。