文章編號: 69333 - 上次校閱: 2005年8月16日 - 版次: 2.2 如何解決浮點精確度/比較問題
結論可靠的方式測試是否兩個浮點變數或運算式是相等 (使用 IEEE 格式或 MBF),您必須減去正在比較的兩個變數,然後測試其差異是否小於值,選擇在單一或雙精確度的重要性的限制。其他的測試相等,將會可靠。下列公式可靠地測試 X 和 Y 是否相等:
在 Microsoft QuickBasic MS-DOS (僅 QB.EXE-副處理器版本)、 版本 1.0 」、 「 第 1.01 」、 「 2.0 」、 「 2.01 及 「 3.0,和 MS-DOS 3.2、 3.22 及 3.23 版本的 Microsoft GW Basic 解譯器中,找不到 MBF (Microsoft 二進位格式)。 本文資訊也會包含在 [標準型] 和 [專業版的 Microsoft Visual Basic 隨附的 MS-DOS 版本 1.0 說明檔中。 其他相關資訊注意: 計算數字中的有效數字可能會遺失限於下列: 多重特別遠一點值中的數字的加法或減法類似值中的數字的計算。當來自多個計算的數字結果時,您可能需要變更您的測試相等,使用較少的有效位數來反映數學遺失有效位數。如果您的測試的重要性使用太多的有效數字,您可能無法探索比較相等的數字是實際相等的正確度可能限制內。 在基本上面所列的產品使用 IEEE 浮點數格式,中繼計算會執行在暫存的內部 64 位元暫存器,其中有更多位元的精確度比儲存在單精度或雙精度變數中。這通常會導致 IF 陳述式傳回錯誤中繼計算的值不等於運算式所比較的狀態。例如: 參考: IEEE 和 MBF 標準嘗試正確性和精確度數字範圍與速度之間取得平衡。精確度測量多少顯著性位元的精確度不遺失在計算中。精確度指的是假數決定多少的十進位數字可以用來表示中位元數。 IEEE 格式及 MBF 儲存的表單 1.x,y 乘冪的數字 (其中 x 和 y 是基底 2 的數字 ; x 是尾數,y 是指數)。 MBF 單精度的尾數,24 位元且雙精度 56 位元的尾數。只是 24 或 56 位元內執行所有的 MBF 計算。 IEEE 單精度的尾數,24 位元且雙精度 53 位元的尾數。不過,所有單精確度與雙精度 IEEE 在 MS-DOS 1.0 版的 Visual Basic ; MS-DOS 版本 3.0/4.x 的 QuickBasic 中 ; 在 MS-DOS 版本 6.0 和 6.0b; 的基本編譯器和基本 PDS 中為 MS-DOS、 7.0 和 7.1re 版本執行計算更大的精確度為 64 位元暫存暫存器中。如此一來 IEEE 計算方法是比儘管 MBF 的能力來代表雙精度的更多個位元的 MBF 計算更精確。 十進位 (基底 10) 標記法中的大多數數字以單精確度與雙精度的資料型別中使用二進位 (基底 2) 浮點數儲存體格式沒有不到精確表示。IEEE 格式及 MBF 無法完全代表 (和必須捨入) 的 y 次方的表單 1.x 的不是所有數字 (其中 x 和 y 是基底 2 的數字)。可以完全表示的數字展現非常廣泛的範圍內。高密度表示的數字是附近 1.0 和-1.0,但如移向 [0] 或 [無限大的數字,就會發生您最最表示的數字。 上述限制經常會造成 Basic 傳回浮點結果比您想像的不同。更多有關本主題即可找到 「 Microsoft 知識庫 」 中查詢下列文字: floating 和點和格式和 QuickBasic IEEE 浮動點格式都記錄在下列手冊:
MBF AND 轉換 AND 指數 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:69333?
(http://support.microsoft.com/kb/69333/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



回此頁最上方