摘要 计算机的错误计算(一)与(二)分别探讨了计算机在处理算术表达式和循环迭代时的错误计算问题。本文将列出计算机浮点运算与数学理论相悖的一些性质,包括但不限于(不)相等、交换律、结合律等。
首先,众所周知,对浮点数,计算机程序不能比较大小。
(1)计算机的浮点数不能进行(不)相等比较
对两个浮点数来说,只有 大于或小于,没有等于或不等于。若要判断它们是否相等,最好是判别它们在坐标轴上的距离是否足够小。
其次,浮点数的运算不再满足数学规则。
(2)分配律、结合律等规则不再成立
加法结合律、乘法对加法的分配律等不再成立。比较简单的一个案例是:(a-a)+b 与 a+(-a+b)可能不相等。当 a 是一个大数时, 则前者为b,而后者可能为0。比如 a=, b=123。
然后,由(2)又会推出另外一个问题:
(3)等价表达式的计算结果可能不等价
最后,从计算机的错误计算(一)中的例1 可知:
(4)不同的精度下,代码的输出可能不一致
(5)不同的软硬件环境下,同一代码的输出也可能不一致