雖然大部分公式的結果不會有明顯差異,但運算結果為極細數值或使用極細數字的運算,則可能會得出更加準確的答案。
範例 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
。
「二進制十進碼」與「十進制浮點」編碼的比較
大多數電腦會將數字儲存為一系列的「0」和「1」,亦即二進數值。稱為「二進制十進碼」(BCD) 的編碼方式會將分數轉換為二進數。當使用 BCD 為數字編碼時,部分數值未必完全準確。舉例來說,0.2
的二進制形式為 0.001100110011…
(不斷重覆)。由於 BCD 編碼必須將數值縮短,導致已儲存的數值會稍為改變。即使 BCD 所導致的差異非常細,但某些類型的運算鏈會令這些差異變得更加明顯。
最新版本的 Pages、Numbers 及 Keynote 使用 128 位元的「十進制浮點」(DFP) 編碼方式。這是一個更加準確的十進制分數編碼方式,可以避免 BCD 編碼的典型進位錯誤。此外,更新後的運算引擎直接使用 DFP 編碼的數字,讓系統能夠更準確地儲存表格輸入格中的數值並計算出公式的結果。
雖然很多公式的結果不會有明顯差異,但運算結果為極細數值或使用極細數字的運算,則可能會得出更加準確的答案。