Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 这些计算结果的细微差别:有人知道为什么(只是出于兴趣)?_Excel_Formulas - Fatal编程技术网

Excel 这些计算结果的细微差别:有人知道为什么(只是出于兴趣)?

Excel 这些计算结果的细微差别:有人知道为什么(只是出于兴趣)?,excel,formulas,Excel,Formulas,我在做一个“两个数字之间的百分比变化”计算,我最初写为(使用Excel 2013): 我把它改成: =NEW NUMBER/OLD NUMBER -1 。。用一个大的电子表格来测试它是否更快。像我经常做的那样,我检查生成的数字是否都相等(使用强制的CellColX=CellColYformula),其中大约80%是相等的,但其他数字不是相等的——数量很少。我在Evaluate Formula工具中观察了该操作,并将单元格中的小数点扩展到返回所有0的位置 例如,OLD NUMBER=10.44和

我在做一个“两个数字之间的百分比变化”计算,我最初写为(使用Excel 2013):

我把它改成:

=NEW NUMBER/OLD NUMBER -1
。。用一个大的电子表格来测试它是否更快。像我经常做的那样,我检查生成的数字是否都相等(使用强制的
CellColX=CellColY
formula),其中大约80%是相等的,但其他数字不是相等的——数量很少。我在Evaluate Formula工具中观察了该操作,并将单元格中的小数点扩展到返回所有0的位置

例如,
OLD NUMBER=10.44
NEW NUMBER=10.86
使用第一种方法解析为
0.040229880574713
,使用第二种方法解析为
0.040229880574712

但是,
OLD NUMBER=13.17
NEW NUMBER=10.44
使用任一方法解析为
-0.207289293849658

(旧的和新的数字是真正的2位小数。)

主要是为了强迫症,有没有已知的原因?对于非常敏感的计算有什么意义吗

有没有已知的原因

如评论中所述,是:

与其他电子表格一样,Microsoft Excel的精度有限,因为它只保留一定数量的数字来描述数字(精度有限)。默认情况下,Excel名义上使用8字节的数字,这是IEEE 754规范[1]的1985年修订版(除数字外,Excel还使用其他一些数据类型。[2]),尽管Excel可以显示30位小数,但其指定数字的精度仅限于15位有效数字,由于三个问题,计算的精度可能更低:舍入、[3]截断和二进制存储

(来自)

对于非常敏感的计算有什么意义吗

同样是的,我建议不仅仅是非常敏感的计算,而是经常在计算中涉及非常大或非常小的数字。然而,由于正常比例尺的“非常大”和“非常小”处于天文或解剖学水平,Excel用户很少遇到它们。尽管有很多这样的例子(如和)


正如您所注意到的,这些近似值经常导致问题的地方是在比较中。如果没有四舍五入(数学上)应该相同的结果,则可能不相同,
=EXACT
或just
=
可能会错误地返回
FALSE

请参见,这也有助于解释它。谢谢你的指点。我怀疑我所做的任何事情都会受到它的影响。
=NEW NUMBER/OLD NUMBER -1