我正在进行“两个数字之间的百分比变化”计算,我最初将其写为(使用Excel 2013):
=(NEW NUMBER - OLD NUMBER)/OLD NUMBER
我把它改为:
=NEW NUMBER/OLD NUMBER -1
..用大型电子表格测试它是否更快。就像我经常做的那样,我检查生成的数字是否都是等价的(使用强制CellColX = CellColY
公式),其中大约80%是,但其他人不是 - 只是一小部分。我在评估公式工具中观察了这个动作,并将单元格中的小数位扩展到了全部返回0的位置。
例如,OLD NUMBER = 10.44
和NEW NUMBER = 10.86
使用第一种方法解析为0.0402298850574713
,使用第二种方法解析为0.0402298850574712
。
但是,OLD NUMBER = 13.17
和NEW NUMBER = 10.44
使用任一方法解析为-0.207289293849658
。
(OLD
和NEW
数字是真正的2位小数。)
主要是出于OCD的缘故,有一个众所周知的原因吗?对于非常敏感的计算有什么意义吗?
答案 0 :(得分:0)
有一个众所周知的原因吗?
如评论中所述,是:
与其他电子表格一样,Microsoft Excel只能在有限的精度下工作,因为它只保留一定数量的数字来描述数字(它的精度有限)。 Excel名义上默认使用8字节数字,修改后的1985版IEEE 754规范[1](除了数字,Excel使用其他一些数据类型。[2])虽然Excel可以显示30个小数位,但其精度为指定的数字仅限于15个有效数字,由于三个问题,计算可能具有更低的准确度:舍入,[3]截断和二进制存储。
(来自Wikipedia。)
对于非常敏感的计算有什么意义吗?
同样是的,我建议不仅仅是非常敏感的计算,而是通常在计算中涉及非常大或非常小的数字。然而,因为正常尺度的“非常大”和“非常小”处于天文或解剖水平,所以Excel用户并不经常遇到它们。虽然SO上有很多例子,例如here和Google Sheets。
正如您所指出的那样,这些近似值会定期导致问题,并进行比较。如果没有舍入结果应该(数学上),那么结果可能不同,=EXACT
或=
可能会错误地返回FALSE
。