代码之家  ›  专栏  ›  技术社区  ›  Rasputin

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

  •  0
  • Rasputin  · 技术社区  · 9 年前

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

    2 回复  |  直到 8 年前
        1
  •  3
  •   Rory Daulton    8 年前

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

    7.7383203273389 ;

    对于单元格AE78, 7.73832000604851

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

    decimal 模块,您可以将精度扩展到任意有限位数。我不知道Wolfram Alpha的精确度。当我使用Python的

    对于AE77, 7.738320327338786254453768000

    对于AE78, 7.738320006408585382386216000 .

    您可以忽略每个结果中的三个尾随零,这三个结果来自于 1000

        2
  •  1
  •   geza    8 年前

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

    • AE77可以介于[7.73831901415622551;7.73832164052130631]

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

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

    推荐文章