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

我有一个excel文件,其中AE61,AE62和AE63的值分别为9.97551241928828000 x10 ^( – 1),3.82933360922740 x10 ^( – 4)和2.065824710241100 x10 ^( – 3)。 (AE63 / AE61)/(0.00038 / 0.99757)-1)×1000input公式((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将数字存储在IEEE754 64位中。 这种格式有约16位有效数字。 但是,你列出的数字less。 例如,0.000382933361只有9位有效数字。 我想,这个数字已经四舍五入印刷。 它可以是(例如)低至0.0003829333605001,并且可以高达0.0003829333614999。 这种不准确可能会影响最终结果。

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

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

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

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

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

对于细胞7.7383203273389 ;

对于细胞7.73832000604851

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

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

对于7.738320327338786254453768000 ;

对于7.738320006408585382386216000

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