使用SUM时不同的结果而不是?

有没有人知道为什么Excel使用SUM函数时,给同一个问题不同的答案?

如果你input:

=0.1+0.1+0.1-0.3 

你得到一个不同的(正确) 0响应比较:

 =SUM(0.1+0.1+0.1-0.3) 

这给出了5.55112E-17的错误答案。

我知道Excel使用IEEE 754,这解释了为什么第二个是closures的,但是我想知道的是这两者是如何不同的,第一个做什么才能使它正确?

这是从微软的页面解释浮点运算:


当值达到零时的示例

在Excel 95或更早版本中,将以下内容input到新的工作簿中:

 A1: =1.333+1.225-1.333-1.225 

用鼠标右键单击单元格A1,然后单击格式单元格。 在数字选项卡上单击类别下的科学。 将小数位数设置为15.而不是显示0,Excel 95显示-2.22044604925031E-16。

然而,Excel 97引入了一个优化,试图纠正这个问题。 如果加法或减法操作的结果值为零或非常接近零,则Excel 97及更高版本将补偿由于将操作数转换为二进制或从二进制转换而引入的任何错误。 上面的示例在Excel 97和更高版本中执行时以科学记数法正确显示0或0.000000000000000E + 00。


看起来好像在最后一段中提到的优化不适用,如果括号包含在计算中 – 可能会扰乱计算顺序。 例如:

 =0.1+0.1+0.1-0.3 = 0 

然而:

 =(0.1+0.1+0.1-0.3) = 5.551115123125780E-17 

然而,误算不仅适用于括号内的数字,也适用于外部的数字,只要公式中有括号。 所以:

 =0.1+0.1+0.1-0.3+(0.1+0.1+0.1-0.3) = 1.110223024625160E-16 

尽pipe第一部分没有被括起来,但是这个计算在计算中给出了两倍的误差。