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

Why do these two formulas give me the exact same incorrect value?

我有一个 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.

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

对于单元格 AE77,7.7383203273389

对于单元格 AE78,7.73832000604851

这些与 Wolfram Alpha 的结果非常接近,大约有 14 位有效数字。 MSExcel使用"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。这种不准确会影响最终结果。

如果我用较低的 bound/higher 绑定数字代替 AE62 和​​ AE63(四舍五入为您列出的数字),我可以获得您显示的结果:

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

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

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