答案1
答案2
您偶然发现的是计算机科学中第一堂课中讲到的课程的变体。这基本上是一个浮点溢出错误(通俗地说是“舍入错误”)。
在 Excel 中,尝试
=SUM(A1:A4)
和:
A1 10^20
A2 1
A3 -10^20
A4 -1
显然,我们期望答案是0
。Excel 会将其显示为-1
。您也可以尝试=A1+A2+A3+A4
。答案-1
仍然是 。现在=A1+A3+A2+A4
按该顺序尝试。Excel 现在将给出正确答案0
。
由于 Excel 存储数字的方式 (IEEE 754),如果您尝试将一个比另一个小很多的数字相加,Excel 会将其丢弃,从而产生错误。在上面的例子中,10^20
+1
得出10^20
。因此,最好先将大小相似的数字相加。
在您的示例中,由于无法用二进制准确表示 4119.2,因此可能还存在舍入误差问题。
出于上述原因,程序员和工程师更愿意将数字存储为整数(整数),而不是浮点数(非整数),因为精度很重要。例如,金融系统对仅使用整数进行计算有严格的规定(例如,美分而不是美元和美分)。同样,时间存储为固定日期的秒数。这种错误的典型例子是第一次海湾战争中爱国者导弹的失败,造成 28 人死亡——0.000000095 秒的误差加上飞毛腿导弹的高速度,足以让爱国者反导系统将飞毛腿导弹视为异常。
在您的情况下,无论出于何种意图和目的,9x10^-13 都是 0(正如其他人指出的那样)!
如果你对此进一步感兴趣,这些第一年的笔记很容易理解。
有关的一些信息爱国者导弹失败。