浮点运算的关联性
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
由于浮点值存储七位精度,因此该数字将保留!
我正在尝试了解涉及浮点运算时的关联性。 在我的讲义中,说明如下:
"假设浮点值存储七位精度。 考虑将 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
由于浮点值存储七位精度,因此该数字将保留!