比較兩個浮點數時,得到錯誤的結果



主要軟體: LabVIEW Development Systems>>Full Development System
主要軟體版本: 7.1
主要軟體修正版本:
次要軟體: Measurement Studio, LabWindows/CVI Development Systems, LabVIEW Development Systems

問題: 當我在程式中(LabVIEW, CVI, Measurement Studio或任何其他的程式語言) 比較兩個浮點數是否相等時,即使數值在面板上看起來相同,但是比較的結果卻為false,舉例來說,在LabVIEW中對兩個數值control相減(0.62-0.60),結果應為0.02,但對此輸出結果與0.02相比時,LabVIEW 卻顯示這兩個值不相同,為什麼會有這樣的結果?

解答: 這個問題的原因不是來自於任何支援浮點數的程式語言,而是由於浮點數在電腦中的表現方式,浮點數在電腦中實際上是以高精確的二進位的方式儲存,因此,數值即使看起相同實際上二進位的數值卻不同。

以LabVIEW為例,當我們提升數值的精準度至小數點後15到20位,我們會發現兩個原本看起來相同的數字開始出現不同,如果我們將數字轉成字串再以16進位的方式顯示,會發現在第三個數值會差距4bit,因此,技術上,這兩個數值不同。

如果需要比較兩個浮點數,比較好的方式為先決定小數點後有幾位數(假設為X),再對原本的數字乘上10^x,再將結果轉換為整數,對兩個整數的資料做比較即可得到正確結果。

相關連結:

附加檔案:


Comparison.llb - Comparison.llb



報告日期: 07/30/1998
最後更新: 09/21/2007
文件偏號: 1BTCIC0W