Excel 为什么这两个公式给出了完全相同的错误值?

Excel 为什么这两个公式给出了完全相同的错误值?,excel,math,error-handling,arithmetic-expressions,calculation,Excel,Math,Error Handling,Arithmetic Expressions,Calculation,我有一个excel文档,其中单元格AE61、AE62和AE63的值分别为9.97551241928828000 x 10^(-1)、3.82933360922740 x 10^(-4)和 分别为2.065824710241100 x 10^(-3)。我想知道为什么,当我在AE77中键入公式((AE62/AE61)/(0.00038/0.99757)-1)*1000,并在AE78中键入公式((AE63/AE61)/(0.00205/0.99757)-1)*1000时,两个单元格中的值都是7.738

我有一个excel文档,其中单元格AE61、AE62和AE63的值分别为9.97551241928828000 x 10^(-1)、3.82933360922740 x 10^(-4)和 分别为2.065824710241100 x 10^(-3)。我想知道为什么,当我在AE77中键入公式((AE62/AE61)/(0.00038/0.99757)-1)*1000,并在AE78中键入公式((AE63/AE61)/(0.00205/0.99757)-1)*1000时,两个单元格中的值都是7.738320123873,尽管根据Wolfram Alpha我们有:

((0.000382933361/0.997551241928)/(0.00038/0.99757)-1)*1000=7.738320327338977213

((0.002065824710/0.997551241928)/(0.00205/0.99757)-1)*1000=7.738320006408680641


这两者不相等,也不相等于7.738320123873。

在我的Excel版本1706中,在Windows 10 Home上的Office 365上,64位运行在AMD A8-5500 CPU上,我得到:

对于单元格AE77,
7.7383203273389

对于单元AE78,
7.73832000604851

这与Wolfram Alpha的结果非常接近,大约有14位有效数字。MS Excel使用“double”类型——以8字节存储的浮点值,可以存储15到16个有效数字。每个操作可能会丢失有效数字,有时每个操作最多会丢失一个有效数字。一些像减法这样的运算会损失更多,我看到你在每次计算中都有减法运算。所以我的Excel和预期的一样接近

如果需要更好的精度,请使用具有扩展精度浮点值的计算机语言或软件。例如,Python有
decimal
模块,可以将精度扩展到任意有限位数。我不知道Wolfram Alpha的精确度。当我使用Python的
decimal
及其默认的30位小数时,我得到

对于AE77,
7.738320327338786254453768000

对于AE78,
7.738320006408585382386216000


您可以忽略每个结果中的三个尾随零,它们来自于最后乘以
1000
。我感兴趣地注意到,这些结果与Wolfram Alpha结果不同。

在我的Excel 1706版本中,在Windows 10 Home 64位上的Office 365上,在AMD A8-5500 CPU上运行,我得到:

对于单元格AE77,
7.7383203273389

对于单元AE78,
7.73832000604851

这与Wolfram Alpha的结果非常接近,大约有14位有效数字。MS Excel使用“double”类型——以8字节存储的浮点值,可以存储15到16个有效数字。每个操作可能会丢失有效数字,有时每个操作最多会丢失一个有效数字。一些像减法这样的运算会损失更多,我看到你在每次计算中都有减法运算。因此,我的Excel与预期的非常接近

如果需要更好的精度,请使用具有扩展精度浮点值的计算机语言或软件。例如,Python有
decimal
模块,可以将精度扩展到任意有限位数。我不知道Wolfram Alpha的精确度。当我使用Python的
decimal
及其默认的30位小数时,我得到

对于AE77,
7.738320327338786254453768000

对于AE78,
7.738320006408585382386216000


您可以忽略每个结果中的三个尾随零,它们来自于最后乘以
1000
。我饶有兴趣地注意到,这些结果与Wolfram Alpha结果不同。

这是因为Excel将数字存储在IEEE754 64位中。此格式有约16位有效数字。但你列出的数字却少之又少。例如,0.000382933361只有9个有效数字。我想,这个数字已经四舍五入打印出来了。它可以(例如)低至0.0003829333605001,也可以高至0.0003829333614999。这种不准确会影响最终结果

如果我用下限/上限数字替换AE62和AE63(四舍五入到您列出的数字),我可以得到您显示的结果:

  • AE77可以介于[7.73831901415622551;7.73832164051325631]之间
  • AE78可以介于[7.738319762989220862;7.738320249827568276]之间
两个区间都包含excel计算的数字7.738320123873


所以,总而言之,如果您可以更精确地打印数字(不是四舍五入到12位小数,而是至少有17位有效数字),我相信您会发现Excel实际上精确地计算公式。

这是因为Excel将数字存储在IEEE754 64位中。此格式有约16位有效数字。但你列出的数字却少之又少。例如,0.000382933361只有9个有效数字。我想,这个数字已经四舍五入打印出来了。它可以(例如)低至0.0003829333605001,也可以高至0.0003829333614999。这种不准确会影响最终结果

如果我用下限/上限数字替换AE62和AE63(四舍五入到您列出的数字),我可以得到您显示的结果:

  • AE77可以介于[7.73831901415622551;7.73832164051325631]之间
  • AE78可以介于[7.738319762989220862;7.738320249827568276]之间
两个区间都包含excel计算的数字7.738320123873


因此,总而言之,如果您可以更精确地打印数字(不是四舍五入到小数点后12位,而是至少有17位有效数字),我相信您会发现Excel实际上精确地计算公式。

我得到了不同的结果:请看我的答案。您使用的是哪个版本的Excel?在哪个操作系统上?相关:@RoryDaulton,它是mac上的Excel 15.32,OS X版本为10.10.5。我得到了不同的结果:请参阅我的答案。您使用的是哪个版本的Excel,在哪个操作系统上?相关:@RoryDaulton,这是mac上的Excel 15.32,OS X版本为10.10.5谢谢您的回复!四舍五入或截断并丢失重要数字的计算