Programming languages 关于浮点运算的关联性

Programming languages 关于浮点运算的关联性,programming-languages,associativity,compiler-construction,Programming Languages,Associativity,Compiler Construction,我试图理解浮点运算的关联性。 在我的课堂讲稿中,陈述如下: “假设浮点值存储七位精度。 考虑将11个数字相加的问题,其中一个数字是10^7,另十个是1 如果将小数字(1)分别添加到大数字中,一次添加一个,则对该数字没有影响,因为小数字出现在大数字的第八位。”。所以这里我知道结果是1000001 但是,如果先将小数字相加,然后将结果与大数字相加,则结果为7位精度1.000001*10^7 但在我看来,这两种方法都是一样的:我们把10个数字加到更大的数字上。 有人能澄清一下这个问题吗? 谢谢让我们先

我试图理解浮点运算的关联性。 在我的课堂讲稿中,陈述如下:

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

如果将小数字(1)分别添加到大数字中,一次添加一个,则对该数字没有影响,因为小数字出现在大数字的第八位。”。所以这里我知道结果是1000001

但是,如果先将小数字相加,然后将结果与大数字相加,则结果为7位精度1.000001*10^7

但在我看来,这两种方法都是一样的:我们把10个数字加到更大的数字上。 有人能澄清一下这个问题吗?
谢谢

让我们先看一下第一种方法。当小的数字一个接一个地加到大的数字上时,以下情况将发生十次:

10000000+1=10000001

但是,由于浮点值只存储精度为7位的最后一位数字,即8位数字,将在第7位中四舍五入为零。此操作将发生10次,因此值将保持10000000

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

10000000+10=1000000


由于浮点值存储七位精度,因此该数字将保持不变

所以基本上在第一种方法中,就像我们在加1,但在10000000中没有加任何东西?计算机所做的是在每次操作后保存,在这种情况下是前7位。由于我们刚才添加的值1不在这些前7位中,因此它不会被保存,操作也会丢失。基本上,它会被添加,但不会被存储。