浮点运算的关联性

associativity of operations regarding floating points

我正在尝试了解涉及浮点运算时的关联性。 在我的讲义中,说明如下:

"假设浮点值存储七位精度。 考虑将 11 个数字加在一起的问题,其中一个数字是 10^7,其他十个数字是 1.

如果小数(1)分别加到大数上,一次加一个,对那个数没有影响,因为小数出现在大数的第八位”。所以在这里我了解到结果是1,000,001.

"however, if the small numbers are first added together and the result is added to the large number, the result is a seven-digit accurancy 1.000001 * 10^7"

但这两种方法对我来说似乎是一样的:我们将 10 个数字加到更大的数字上。 有人可以澄清这个问题吗? 谢谢

让我们先回顾一下第一种方法。当小数一个一个地加到大数上时,会发生十次:

10,000,000 + 1 = 10,000,001

但是,由于浮点值仅存储七位精度,因此最后一位(即八位)将在第七位四舍五入为零。此操作将发生 10 次,因此该值将保持为 10,000,000。

接下来我们来看第二种方法。首先将 10 个数字 1 加在一起,因此总和为 10。当将其添加到 10^7 时,将发生以下情况:

10,000,000 + 10 = 10,000,010

由于浮点值存储七位精度,因此该数字将保留!