文章編號: 78113 - 上次校閱: 2010年5月13日 - 版次: 7.0 浮點算術可能會在 Excel 中造成不正確的計算結果
在此頁中結論 本文將告訴您 Microsoft Excel
如何儲存和計算浮點數。由於四捨五入和/或資料截斷的緣故,這可能會影響某些數字或公式的計算結果。 概觀Microsoft Excel 的設計是以有關儲存和計算浮點數的 IEEE 754 規格為基礎。IEEE 是電子電機工程師協會 (Institute of Electrical and Electronics Engineers) 的縮寫,這個國際組織負責決定電腦軟體和硬體的標準。754 規格是相當廣受採用的規格,它說明浮點數應該如何儲存在二進位電腦中。這個規格之所以如此普及,是因為它允許將浮點數儲存在合理的空間中,並讓計算可以相當快速地執行。754 標準已運用在現今幾乎所有 PC 微處理器的浮點單位及數值資料處理器,PC 微處理器是執行浮點算術的處理器,包括 Intel、Motorola、Sun 和 MIPS 處理器。儲存數字時,對應的二進位數字可以代表任何數字或分數。例如,在小數系統中,分數 1/10 可以用 0.1 來表示。不過,二進位格式中的相同數字會變成重複的二進位和十進位
0001100110011100110011 (以此類推)
並且可以無限地重複。這個數字不能以有限的 (受限的) 空間量來表示。因此,在儲存時,這個數字會四捨五入為 -2.8E-17
左右。然而,IEEE 754 規格有一些限制,可分為三大類:
其他相關資訊最大/最小限制所有電腦都有可以處理的最大和最小數字。由於儲存數字用的記憶體位元數量是有限的,所以它允許儲存的最大或最小數字也是有限的。就 Excel 而言,可以儲存的最大數字為 1.79769313486232E+308,可以儲存的最小正數為 2.2250738585072E-308。必須遵守 IEEE 754 的情況
不遵守 IEEE 754 的情況
精確度浮點數字會以二進位格式儲存在 65 位元範圍內的三個部分:正負號、指數和假數。摺疊此表格
假數和指數均儲存在個別的元件中。因此,可能的精確度會因要操作的數字 (假數) 大小而有所不同。在 Excel 中,雖然 Excel 可以儲存從 1.79769313486232E308 到 2.2250738585072E-308 的數字,但也只能提供 15 位元以內的精確度。這項限制是嚴格遵守 IEEE 754 規格的結果,並非 Excel 的限制。這種程度的精確度也能在其他試算表程式中看到。 浮點數字使用下列格式表現,其中的指數為二進位指數:
X = 分數 * 2^(指數 - bias) 分數是數字的正規化分數部分,之所以要正規化,是因為指數已調整為讓前置位元永遠是
1。這樣一來,不必儲存就能得到更多位元的精確度。這也就是隱含位元存在的原因。這類似於操作指數,讓小數點左邊有一個位元的科學標記;只不過在二進位中,您永遠可以操作指數,讓第一個字元永遠是
1,因為其中只有 1 和 0。Bias 是用來避免必須儲存負指數的 bias 值。單精度數字的 bias 是 127,雙精度數字的則為 1,023 (十進位)。Excel 會使用雙精度儲存數字。 使用非常大的數字的範例請在新的活頁簿中輸入下列內容:A1:1.2E+200 B1:1E+100 C1:=A1+B1 使用非常小的數字的範例請在新的活頁簿中輸入下列內容:答 1:0.000123456789012345 B1: 1 C1:=A1+B1 修正精確度錯誤Excel 提供兩個可以彌補四捨五入錯誤的基本方法:ROUND 函數和 [以顯示值為準] (Precision as displayed) 或 [以顯示值為準] (Set precision as displayed) 活頁簿選項。方法 1:ROUND 函數下列範例使用上述資料,並使用 ROUND 函數將數字強制為 5 位數。這可以讓您成功地將結果與其他值比較。答 1:1.2E+200 B1:1E+100 C1:=ROUND(A1+B1,5)
結果是 1.00012。
D1:=IF(C1=1.00012, TRUE, FALSE)
結果值為 TRUE。 方法 2:以顯示值為準在某些情況下,您可以使用 [以顯示值為準] 選項避免四捨五入的錯誤影響工作成果。這個選項會強制工作表中各數字的值成為顯示值。如果要啟用這個選項,請依照下列步驟執行:
重複結果近似零的二進位數字和計算以二進位格式儲存浮點數還有另一個困擾的問題,那就是十進位底數中有限的、不重複的數字,會在二進位中變成無限且重複的數字。最常見的範例就是值 0.1 和其中的變數。雖然這些數字可以在底數 10 中完美表示,但是在二進位格式中的相同數字,則會在儲存於假數中時變成重複的二進位數字:
000110011001100110011 (以此類推)
IEEE 754 規格不會對任何數字提供特別的規定;它會在假數中儲存可以儲存的內容,再截斷其餘部分。這會造成在儲存時出現有關
-2.8E-17 或 0.000000000000000028 的錯誤。即使是一般的小數 (例如小數點 0.0001) 亦無法以二進位格式準確表示 (0.0001 是重複的二進位分數,其中間隔 104 位元)。這就像是分數 1/3 無法以小數點 (重複的 0.33333333333333333333) 準確表示的原因一樣。 這會說明為何 Microsoft Visual Basic for Applications 中的簡單範例 新增負數的範例
當值接近零時的範例
至於 Excel 97,則是加入了嘗試修正此問題的最佳化做法。如果進行了加法或減法作業而得出零或非常近似零的值,Excel 97 和更新版本會補償因為在二進位格式間轉換運算元所造成的錯誤。上述範例是在 Excel 97 中執行,而且之後會在科學標記中正確地顯示 0 或 0.000000000000000E+00。 如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件: 172911?
(http://support.microsoft.com/kb/172911/
)
Incorrect Result Raising 10 to Very Large/Very Small Power
214373?
(http://support.microsoft.com/kb/214373/
)
XL2000: Incorrect Result Raising 10 to Very Large/Very Small Power
如需有關浮點數和 IEEE 754 規格的詳細資訊,請造訪下列全球資訊網網站:http://www.ieee.org
(http://www.ieee.org)
http://stevehollasch.com/cgindex/coding/ieeefloat.html (http://stevehollasch.com/cgindex/coding/ieeefloat.html) ?考這篇文章中的資訊適用於:
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
回此頁最上方
