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]