Excel 使用SUM和not时的不同结果?

Excel 使用SUM和not时的不同结果?,excel,Excel,有人知道为什么Excel在使用和函数时对同一个问题给出不同的答案吗 如果您键入: =0.1+0.1+0.1-0.3 您得到的0响应与以下响应不同(正确): =SUM(0.1+0.1+0.1-0.3) 这给出了不正确的答案5.55112E-17 我知道Excel使用IEEE 754,这就解释了为什么第二个是关闭的,但我想知道的是这两个有什么不同,第一个是如何做到正确的?这是从解释浮点运算中得出的: 值为零时的示例 在Excel 95或更早版本中,在新工作簿中输入以下内容: A1: =1.3

有人知道为什么Excel在使用和函数时对同一个问题给出不同的答案吗

如果您键入:

=0.1+0.1+0.1-0.3 
您得到的
0
响应与以下响应不同(正确):

=SUM(0.1+0.1+0.1-0.3)
这给出了不正确的答案
5.55112E-17

我知道Excel使用IEEE 754,这就解释了为什么第二个是关闭的,但我想知道的是这两个有什么不同,第一个是如何做到正确的?

这是从解释浮点运算中得出的:


值为零时的示例

在Excel 95或更早版本中,在新工作簿中输入以下内容:

A1: =1.333+1.225-1.333-1.225 
在单元格A1上单击鼠标右键,然后单击“设置单元格格式”。在数字选项卡上, 单击“类别”下的“科学”。将小数点设置为15位。相反 在显示0时,Excel 95显示-2.22044604925031E-16

然而,Excel97引入了一种试图纠正错误的优化 对于这个问题。应该是加法还是减法运算的结果 如果值等于或非常接近零,Excel 97及更高版本将 补偿由于转换数据而引入的任何错误 与二进制之间的操作数。在Excel中执行上述示例时 97及更高版本正确显示0或0.000000000000000 E+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
尽管第一部分没有用括号括起来,但此计算的误差是其计算误差的两倍。

这是从解释浮点运算中得出的:


值为零时的示例

在Excel 95或更早版本中,在新工作簿中输入以下内容:

A1: =1.333+1.225-1.333-1.225 
在单元格A1上单击鼠标右键,然后单击“设置单元格格式”。在数字选项卡上, 单击“类别”下的“科学”。将小数点设置为15位。相反 在显示0时,Excel 95显示-2.22044604925031E-16

然而,Excel97引入了一种试图纠正错误的优化 对于这个问题。应该是加法还是减法运算的结果 如果值等于或非常接近零,Excel 97及更高版本将 补偿由于转换数据而引入的任何错误 与二进制之间的操作数。在Excel中执行上述示例时 97及更高版本正确显示0或0.000000000000000 E+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

尽管第一部分没有用括号括起来,但这个计算给出的误差是它的两倍。

你的第一个公式使用了
-3
,而你的
公式包含
-0.3
…我相信他在第一个公式中也是指
-0.3
,一个等于0,另一个等于
5.55112E-17
。我已经编辑了这个问题。现在它实际上非常有趣,我的滑稽回答不再有效。似乎与参数也一样
=SUM(0.1+0.1+0.1-0.3)=SUM(0.1,0.1,0.1,-0.3)
@Jeeped:我们知道这一点。我现在不得不悲伤地离开,但答案与Excel在计算周期中对常量表达式求值的位置有关。你的第一个公式使用
-3
,而你的
求和
公式包含
-0.3
…测试出来,我相信他在第一个公式中也是指
-0.3
,一个等于0,另一个等于
5.55112E-17
。我已经编辑了这个问题。现在它实际上非常有趣,我的滑稽回答不再有效。似乎与参数也一样
=SUM(0.1+0.1+0.1-0.3)=SUM(0.1,0.1,0.1,-0.3)
@Jeeped:我们知道这一点。我现在不得不悲伤地离开,但答案是关于一个常量表达式在其计算周期中由Excel计算的位置。要添加到测试用例中,
=(0.5-0.4-0.1)
=1-1+(0.5-0.4-0.1)
关闭,但
=0.5-0.4-0.1
=(0.5-0.4-0.1)+1
关闭correct@Jordan谢谢你的回复。我已把它标记为正确的。简言之,我将错误归因于求和函数,而事实上这是由于使用了括号。这是Excel中奇怪的东西。看起来需要进一步优化。要添加到测试用例中,
=(0.5-0.4-0.1)
=1-1+(0.5-0.4-0.1)
关闭,但
=0.5-0.4-0.1
=(0.5-0.4-0.1)+1
关闭correct@Jordan谢谢你的回复。我已把它标记为正确的。简言之,我将错误归因于求和函数,而事实上这是由于使用了括号。这是Excel中奇怪的东西。看起来需要进一步优化。