關於 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 編碼的數字進行操作,表格輸入格中的值能更精確地儲存,並且更精確地計算公式結果。

許多公式不會顯示明顯的差異,但是得出或使用極小數字的計算現在可以顯示更精準的答案。

發佈日期: