對於浮點型數據運算精度丟失問題


  對於浮點型數據運算精度丟失問題:
產生原因:
    計算機並不能識別除了二進制數據以外的任何數據,無論我們使用何種編程語言,在何種編譯環境下工作,都要先 把源程序翻譯成二進制的機器碼后才能被計算機識別。
    而在存儲浮點型數據時,會分為三部分進行存儲:
        符號位(Sign) : 0代表正,1代表為負
        指數位(Exponent):用於存儲科學計數法中的指數數據,並且采用移位存儲
        尾數部分(Mantissa):尾數部分
            其中前兩位分別為實數符號位和指數符號位,於是存儲結構實際為如下:

 

                     31                  30            29----23        22----0         

               實數符號位    指數符號位    指數位      有效數位

           但是,在將十進制浮點數轉換為二進制浮點數時,小數的二進制有時也是不可能精確的,就如同十進制不能准確表示1/3,二進制也無法准確表示1/10,而double類型存儲尾數部分最多只能存儲52位,於是,計算機在存儲該浮點型數據時,便出現了精度丟失(1)。例如,11.9的內存存儲大約為:1011. 1110011001100110011001100...

            而在進行浮點類數據計算的時候,浮點參與計算,會左移或右移n位,直到小數點移動到第一個有效數字的右邊。於是11.9在轉化為二進制后 小數點左移3位,就得到1. 011 11100110011001100110(精度丟失2)

            於是最終浮點型運算出現了精度丟失誤差。

測試方法:

            建議測試人員在涉及浮點型數據的運算時(如金額),減法運算建議輸入被減數2.4,減數2.0。此時結果
                        
            當為加法運算時,建議輸入加數分別為0.1+0.2。此時運算結果:
           
            當乘法運算時,建議輸入0.2*0.1,此時結果:
    

             

            當除法運算時,建議0.3/0.1,此時結果:
  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM