关于 Pages 文稿、Numbers 表格和 Keynote 讲演中计算精度的提高

更新 Pages 文稿、Numbers 表格和 Keynote 讲演后,您可能会注意到文稿中计算结果的细微变化。这是因为最新版本的 iWork 包含对计算引擎的更新,产生的结果比以前更精确。

大多数公式都没有显示出明显的差异,但是,结果是极小数字或使用极小数字的计算现在可能显示更准确的答案。

示例 1

在之前版本的 Numbers 表格、Pages 文稿和 Keynote 讲演中,像 = 10.0 - 9.8 这样的计算结果值为 0.199999999999999

更改单元格中显示的小数位数(小数位数在 1 到 14 之间)可以解决问题,以显示预期的结果 0.2。增加单元格中显示的小数位数,会显示 0.199999999999999000000000000000

这是由于十进制数在内部以二进制存储。十进制数的二进制表示会导致非常小的差异。Pages 文稿、Numbers 表格和 Keynote 讲演中的计算引擎一直采用复杂的技术来避免这些差异在计算中集合,但是在非常高的精度下,差异会变得明显。

新计算引擎通过在整个计算过程中使用数字的十进制表示,大大改进了以前的版本。

结果是,相同的计算 = 10.0 - 9.8,现在的结果值为 0.2。增加显示的小数位数,现在显示的值为 0.2000000000000000000000000000000

示例 2

在之前版本的 Numbers 表格中,公式 ROUND(8.415,2) 返回值 8.41。这种情况发生的原因也是,值是以二进制形式存储在内部的。

使用新的计算引擎,ROUND(8.415,2) 返回 8.42

关于二-十进制数与十进制浮点编码

大多数电脑将数字存储为一系列零和一,这些是二进制值。一个称为二-十进制数 (BCD) 编码的进程将小数转换为相应的二进制数。当使用 BCD 对数字进行编码时,某些值无法完全准确地表示。例如,0.2 的二进制形式是 0.001100110011...(重复)。必须截断该值才能使用 BCD 对它进行编码,这会稍微改变存储的值。尽管 BCD 引入的差异可能非常小,但是当通过某些类型的计算链放大时,这些差异会变得更加明显。

最新版本的 Pages 文稿、Numbers 表格和 Keynote 讲演使用 128 位十进制浮点 (DFP) 编码对数字进行编码。这是一种更精确的十进制小数编码方法,避免了 BCD 编码中常见的舍入错误。此外,更新的计算引擎可以直接处理 DFP 编码的数字 — 更准确地存储表格单元格中的值,并更准确地计算公式结果。

许多公式都没有显示出明显的差异,但是,结果是极小数字或使用极小数字的计算现在可能显示更准确的答案。

发布日期: