MATLAB的eps,浮點數相對精度


  MATLAB的eps函數,官方幫助文檔是這么描述的:Floating-point relateive accuracy,也就是浮點數的相對精度。

  大家都知道,在數學中,實數有無窮多個,數值可以無限大,精度也可以無限小。而在計算機中,因為表示數值的字長有限,不可能無限地表示一個數的有效數字。所以在計算機中,是沒有絕對概念上的無窮大和無窮小的。兩個相鄰數字(中間不能再有其他數值)的“間隔”,就是一般意義上的相對精度。(相對精度的具體含義可以自行Baidu,也可以參見這個帖子: 關於Matlab的eps函數 )。

  好,下面進入正題:

    我在查看eps的幫助文檔時,發現文檔中提到,eps的輸出應該是:

2^(-52)

    當時我就不理解了,因為大家直接在MATLAB下面輸出,結果肯定是:

2.2204e-16

    這不對啊。百思不得其解!有聰明的看官肯定知道我到底犯了什么錯誤。不過,當時我就是不明白,看了stackoverflow的這個帖子( What's the actual value of eps in Matlab? ),才知道自己的問題,真是蠢到家了。因為大家只要這么寫:

 

>> 2^(-52)

ans =
    
    2.2204e-16

    明白了吧!注意的一點是,如果這么寫:

>> 2^(-52) == 2.2204e-16

ans =
  
  0

    結果是不對的。因為計算機存儲數值的問題,2.2204e-16在存儲時,與2^(-52)是不同的,有誤差。所以,結果顯示二者不同。有經驗的同學,應該在判斷一個浮點變量是否為零的時候,碰到過類似的事情。注意在判斷浮點數是否相等時,不能使用 “==” 符號

  

  總之,碰到問題還是應該多想想,多試試。


免責聲明!

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



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