我有一个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。
答案 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(它会四舍五入到你列出的数字),我可以得到你所显示的结果:
两个区间都包含excel计算的数字,7.738320123873。
所以,总而言之,如果你能以更高的精度打印数字(不是舍入到12位小数,但至少有17位有效数字),我相信你会发现Excel实际上是精确地计算你的公式