網頁

2012年12月6日 星期四

試算表工具的小瑕疵 - 簡單加總竟產生小誤差!

這是一個在以試算表作洪水演算時降雨時序欄與計算時序列作邏輯比對判斷時發現的問題。
請有興趣的朋友在試算表軟體中作以下的操作:
1. 在工作表 A1 位置輸入 0.01。
2. 在工作表 A2 位置輸入 =A$1+A1。
3. 在工作表 B2 位置輸入 =Round (A2,5) - A2。
4. 變更 B 欄的儲存格格式為科學記號顯示方式。
5. 選取 A2:B2,向下複製至 A3:B500 的範圍。

簡單地說就是讓 A 欄內的值依 A1 的值作等間距累加計算,B 欄的值則只是計算 A欄四拾五入至小數第 5位的值與原值的差值 (誤差)。想像中,在真實世界中應該是沒什麼異狀,B 欄的結果應當都是 0.00E+00。但請別忘了 "試算表" 軟體可是活在電腦世界裏。

筆者是以 LibreOffice 3.5.x 的 Calculator 試算表軟體作上述的操作。若朋友您夠幸運,應該會在A 欄計算至 2.47 的位置發現在 B 欄開始產生 8.88E-15 的差值。

若更改 A1 的值為 0.02、0.03、...0.09、0.1、0.2、0.3、...0.9、1.0,則分別會在計算不同的值開始產生差值。筆者則依LibreOffice 3.5.x 的 Calculator 試算表軟體的操作結果,將這些情境的對應結果整理如下表:

不過,這只是一個小瑕疵,知道問題所在就能以變通的方法處理。以本例而言,只要加個 Round 函數即可,在上述操作程序 2 中改為輸入 =Round (A$1+A1)。

這個小狀況,筆者記得以前也曾在 MS-Office 2003 Excel 碰過,朋友不妨自行試試。

沒有留言: