数字计算机的精度

Precison of digital computers

我了解到将 0 和 1 之间的多个值相乘会显着降低数字计算机的精度;我想知道这种假设的依据是什么?它仍然适用于现代计算机吗?

典型的符合 IEEE 标准的小数表示仅支持有限数量的(二进制)数字。所以,很多时候,一些计算的结果并不是预期数学值的精确表示,而是接近它的东西(四舍五入到下一个数字限制内可表示的数字),这意味着大多数情况下都存在一定程度的错误计算。

如果您进行多步计算,您可能会很幸运,因为一步引入的误差会在后续步骤中被一些补充误差所补偿。但这纯粹是运气,统计数据告诉我们,预期误差确实会随着每一步的增加而增加。

如果你使用 float 数据类型进行 1000 次乘法运算(通常达到 6-7 位有效小数位的精度),我希望结果最多只有 5 位数字是正确的,在最坏的情况下只有 3-4 位数字。

有很多方法可以进行精确计算(至少加减乘除),例如在 LISP 编程语言中使用 ratio 类型,但实际上很少使用它们。

所以是的,在支持小数的数据类型中进行多步计算会迅速降低精度,而且所有数字范围都会发生这种情况,而不仅仅是 0 到 1 之间的数字。

如果这对某些应用程序来说是个问题,将数学公式转换为可以更精确计算的等价公式(例如中间步骤更少的公式)是一项特殊技能。