【问题标题】:Is Google Sheets less or more accurate than Microsoft Excel?Google 表格是否比 Microsoft Excel 更准确或更准确?
【发布时间】:2020-10-21 12:46:52
【问题描述】:

我知道浮点数的数值不准确的普遍问题,但我希望 Excel 和 Google 表格的行为相同。不幸的是,他们没有 - 请参阅以下示例:

A1: 15.525         our reference
A2: =3*5.175       should equal 15.525
A3: =A2=A1         shows TRUE, as expected, in both
A4: =A2-A1         but A2 is actually smaller in Google Sheets, by -1.78E-15 [Excel shows 0.00E+00]

B1: =ROUND(A1,2)   shows 15.53, correct, in both
B2: =ROUND(A2,2)   shows 15.53, correct, in both - surprisingly in Google Sheets, looking at A4
B3: =B2=B1         shows TRUE, as expected, in both

C1: =B1-A1         shows 0.00499999999999901, in both
C2: =B2-A2         shows 0.00500000000000078, in both
C3: =C2=C1         shows FALSE, as expected, in both

D1: =C1<0.005      consistent with C1, in both
D2: =C2>0.005      consistent with C2, but inconsistent with correct rounding in B2, in both

那么明显的问题是什么?

  • A3:Google 表格说具有非零差异的数字是相等的(颤抖
  • A4:Excel 显示行为不同的数字之间的差异为零(C1、C2 等)
  • B2/D2:两者都将向上一个比四舍五入的数字小0.005以上的数字

我的问题是:

  • 我应该期望两者的行为不同吗?
  • 差异是不同实现(可能是数字格式)的无意副产品,还是有意的?
  • 这是否记录在某处?

【问题讨论】:

  • 您检查过 Excel 文档吗?
  • 你不能乘以你的出路吗?
  • 这在当前网页版的 Google 表格中无法重现;单元格 A4(“=A2-A1”)显示为零。
  • 众所周知,Excel 会修改它的舍入和显示方式。在 Excel 2008 for Mac (12.3.6) 中,A4 中的公式“=A2-A1”显示“0”。但是输入“=(A2-A1)”会显示“-1.77636E-15”。似乎单元格 A1 和 A2 具有 IEEE-754 binary64 值,并且“A2-A1”进行减法并得到非零结果,但是,当公式为“=A2-A1”时,Excel 正在应用一些未公开的舍入规则并强制结果为零。带括号的版本似乎绕过了这一点,让 Excel 将其视为不受 kludge 规则约束的一般计算,并显示实际结果。
  • 请注意,如果在另一个单元格中输入“=A4”或“=(A4)”,它仍然显示为“0”,这意味着它不仅仅是强制显示A4 单元格中为零,但记录的结果与该单元格关联。

标签: excel google-sheets floating-accuracy


【解决方案1】:

观察

在 Google 表格(2020 年 7 月 2 日的网页版,macOS 10.14.6 上的 Safari 12.1.2)、Microsoft Excel 2008 for Mac 12.3.6 和 Numbers 10.0 上进行了以下观察。在 Excel 中,首选项... > 计算 > “设置显示的精度”被禁用。

单元格已设置:

  • A1:15.525
  • A2:=3*5.175
  • A3:=A2=A1
  • A4:=A2-A1
  • A5:=(A2-A1)
  • A6:=A4*1000000000000000
  • A7:=A5*1000000000000000
  • A8:=(1/3*3-1)*POWER(10,34)

观察到的结果是:

  • A3:所有三个电子表格中的“正确”。
  • A4:三个电子表格中的“0”。
  • A5:Google 表格中的“0”,Excel 中的“-1.77636E-15”,数字中的“0”。
  • A6:Google 表格中的“-1.776356839”,Excel 中的“0”,Numbers 中的“0”。
  • A7:Google 表格中的“-1.776356839”,Excel 中的“-1.776356839”,数字中的“0”。
  • A8:Google 表格中的“0”,Excel 中的“0”,Numbers 中的“-1”。

如果单元格格式从“自动”更改为“科学”,则 Google 表格结果会发生变化:

  • A4:“-1.78E-15”。
  • A5:“-1.78E-15”。

否则,除了外观更改(例如显示“0.00E+00”而不是“0”)之外,其他单元格或电子表格中没有任何更改。

假设

以上观察符合:

  • Google 表格使用 IEEE-754 64 位二进制格式,并且不会对四舍五入进行篡改。 (“0”的初始显示是由于自动选择定点或类似格式。)
  • Excel 使用 IEEE-754 64 位二进制格式,并根据使用的公式对舍入进行修改。也就是说,四舍五入不仅仅是被四舍五入的数字的函数;它取决于上下文。此外,舍入不仅仅是为了显示;它应用于单元格值,因此进一步的计算使用舍入后的结果。
  • 数字使用十进制浮点格式,有效数字为 34 位。没有观察到捏造的舍入。

进一步调查

在 Google Sheets 和 Excel 中观察到的 -1.776356839•10-15 值是 IEEE-754 64 位二进制格式的特征,因此他们似乎很可能正在使用该格式。在 Numbers 中观察到的 -10-34 值不太确定,因此应该进一步研究它使用十进制格式的假设。

上述说明在 Excel 中对接近零的数字进行四舍五入,并在进一步计算中使用四舍五入后的值。另一项实验是构造一个不是一但显示为一但具有简单公式的数字,然后在进一步计算中使用该单元格以查看是否使用了舍入前或舍入后的值。

更多观察

单元格已设置:

  • B1:=1/49*49-1
  • B2:=1/49*49
  • B3:=B2-1

选择 49 是因为在使用 IEEE-754 binary64 进行评估时,1/49*49 产生的数字略低于 1。(这不会发生在较小的分母中,例如 1/3*3,因为尽管在除法,在乘法中还有一个四舍五入的补偿,产生的结果正好是 1。49 是不会发生这种情况的最小整数。)

具有科学格式的结果:

  • B1:Google 表格中的“-1.11E-16”,Excel 中的“0.00E+00”,数字中的“-2E-34”。
  • B2:Google 表格中的“1.00E+00”,Excel 中的“1.00E+00”,数字中的“1E+00”。
  • B3:Google 表格中的“-1.11E-16”,Excel 中的“0E+00”,数字中的“0.00E+00”。

同样,Google 表格似乎使用 IEEE-754,没有任何恶作剧。 Excel 似乎对结果进行了四舍五入。但是,如果添加括号,将 B1 设置为 =(1/49*49-1) 或 B3 设置为 =(B2-1),Excel 将显示“-1.11E-16”。这与在第一组观察中使用括号时禁用舍入是一致的。

但是,现在我们第一次在 Numbers 中看到了一些恶作剧。我们希望 B1 和 B3 显示相同的结果,但事实并非如此。假设:Numbers 在公式中使用更高的精度,但对单元格的最终结果使用更少?

B1 结果与 34 位十进制数字一致。对于 34 位有效十进制数字,1/49 是 02040816326530612244897959183673469。然后 49 倍是 .99999999999999999999999999999999981。四舍五入到 34 位有效数字得到 .9999999999999999999999999999999998,然后减去 1 得到 -2•10-34

进一步的实验(此处未详细说明)建议 Numbers 使用 34 位十进制数字在内部进行计算,但将最终单元格值四舍五入为 15 位十进制数字,并将其用于显示和进一步计算。

【讨论】:

    【解决方案2】:

    这是否记录在某处?

    我能找到的唯一一份文档是 this post from Excel 关于浮点运算可能在 Excel 中给出不准确的结果。从那里,我们可以就您的其余问题得出一些结论。

    我应该期望两者的行为不同吗?

    是的,很可能实现方式不同。

    差异是不同实现(可能是数字格式)的无意副产品,还是有意的?

    可能是由于实施限制。我认为他们不会故意返回错误信息。

    Google 表格是否比 Microsoft Excel 更准确或更准确?

    要测试准确性,我们需要手动或使用可靠的计算器进行计算,然后将计算结果与 Excel 和 Google 表格给出的结果进行比较。我们还需要在一系列公式和操作上测试这种准确性,以便能够得出一致的结论。

    我希望这对您有所帮助。让我知道您是否需要其他任何内容或者您是否不理解某些内容。 :)

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2014-01-10
      相关资源
      最近更新 更多