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)是不同的,有誤差。所以,結果顯示二者不同。有經驗的同學,應該在判斷一個浮點變量是否為零的時候,碰到過類似的事情。注意在判斷浮點數是否相等時,不能使用 “==” 符號。
總之,碰到問題還是應該多想想,多試試。