LibreOffice/Calc/Excel 兼容性和问题
LibreOffice Calc 无法正常处理 Microsoft Excel 的 xlsm 文件。
---
LibreOffice Calc 和 Microsoft Excel 通常计算出略微不同的结果。
期望 (通常是不可见的) Calc 和 Excel 结果之间的偏差,因为它们
- 对输入值应用不同的舍入方法,
'=1234567890123456 - 1234567890000000' stays that in Calc and is calculated to '123456', while Excel changes the input to '=1234567890123450 - 1234567890000000' and calculates '123450' as result.
- 对结果应用不同的舍入 / '快照为零' 方法,
'=2000000000000000+5,1' in Excel: '2000000000000000', in Calc: '2000000000000005'
- 按不同的顺序计算工作表 / 范围 / 操作数
而 Excel 首先按 '行' 顺序,从左到右计算第一行,然后逐行向下计算。
Calc (大多是?) 按 '列' 顺序操作。
由于一些操作的结果有时取决于操作数的顺序,因此会出现差异。
(‘浮点数学’ 和 ‘学校数学’ 之间存在差异! 具有有限精度的 fp-数学不! 结合)
例如,此堆栈的总和在 Calc 中将是正确的 (0,52),但在 Excel 中是错误的 (0,51953125)
0,52 -8796093022207,00 8796093022207,00
而结果相反 (Calc 错误) 对于以下情况
-8796093022207,00 8796093022207,00 0,52
[编辑 2023-09-25] 一段时间前,LO Calc 实施了另一种求和算法 (Kahan / Neumaier / AVX) 并避免了上述一些问题,请注意,现在
'=(0.52 + 8796093022207 - 8796093022207)' -> 0.51953125 has different result than '=SUM(0.52,8796093022207,-8796093022207)' -> 0.52
[/编辑]
Calc 的结果仍然会因其他影响而发生变化,例如,对于 'SUM',第一个 '非零' 被加数被保留并在最后计算,以确定一个小的结果是否应该为零的可能性。这可能因函数而异,并受到操作数堆栈中空单元格的局部影响 / 影响。因此,即使在 Calc 本身中,也期望不可预测的 '模糊' 结果。
偏差大多要小得多,并且不会被注意到,因为结果被舍入到 15 位数字以进行显示,但单元格的 '值' 不会相应地进行校正,并且偏差可能会导致下游计算中出现增强的错误。它们不仅会影响上面示例中选择的极端值,还会影响正常的 '日常' 计算。经典示例是 '=1234 + 0,12 - 1234',结果为 '0,1199999999999xx',显示至少 13 位十进制数字。根据操作数的顺序,Calc 和 Excel 失败的方式不同。
(比较 LibreOffice Calc 开发版 7.2 / Microsoft Excel 2010 64 位)
[bs - 2021-03-12,编辑于 2021-04-28]