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

时间:2017-07-20 18:33:24

标签: 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,并输入公式((AE63 / AE61)/(0.00205 / 0.99757)-1) * 1000进入AE78,我在两个单元格中获得值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。

2 个答案:

答案 0 :(得分:3)

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

表示单元格AE77,7.7383203273389;

表示单元格AE78,7.73832000604851

这些与Wolfram Alpha的结果非常接近,约为14位有效数字。 MS Excel使用" double" type - 以8个字节存储的浮点值,可存储15到16位有效数字。每个操作都会丢失有效数字,有时每个操作最多可丢失一个有效数字。像减法这样的操作可能会失去更多,我看到你在每次计算中都有减法。所以我的Excel尽可能接近。

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

表示AE77,7.738320327338786254453768000;

表示AE78,7.738320006408585382386216000

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

答案 1 :(得分:1)

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

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

  • AE77可介于[7.738319014156225251; 7.738321640521350631]
  • AE78可介于[7.738319762989220862; 7.738320249827568276]之间

两个区间都包含excel计算的数字,7.738320123873。

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