2013-11-21 73 views
1

我執行該代碼的載體,但我希望它不工作:獲取浮點數的指數

A = 1:0.1:1.4 

A = 

    1.0000 1.1000 1.2000 1.3000 1.4000 

A == 1.3000 

ans = 

    0  0  0  0  0 

我想我會得到:

ans = 

     0  0  0  1  0 

爲什麼它不起作用?我該如何讓它按照我的意願工作?

謝謝。

+2

您可能想閱讀一篇有關[浮點比較Matlab]的文章(http://matlabgeeks.com/tips-tutorials/floating-point-comparisons-in-matlab/) – jkshah

+1

並且:http:// docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – sebastian

回答

6

這是比較常用的浮動。嘗試A(4)-1.3。它會給你一些小但不是零的東西。這是因爲浮標具有有限的精度。一般來說,最好不要測試與花車平等。

通常的方法是定義一個小容差(例如1e-9),並以比較寬容到:

abs(A-1.3)<1e-9 
+1

實用提示:如果您經常在相同的數字範圍內工作(如我),您可以定義一個名爲'epsilon'或'eps'的函數例如,並確保它始終在你的道路上。函數做的唯一事情就是返回類似'1e-9'的東西,它可以讓你輕鬆而一致地進行這種比較。如果您嘗試查找進行浮點比較的地方,也可以幫助您。 –

0

這是因爲雙精度。嘗試format long g再次看看A,你會發現它不完全是1.3。看看MATLAB wiki瞭解這是爲什麼。對浮點數做平等測試絕不是一個好主意。

1

0.1具有寫在基體2時的無限擴展: 0.000110011001100110011001100110011001100110011001100110011001100

殼代碼以獲得:

bc -lq 
obase=2 
1/10 

Matlab的將截斷到50個數字(?)。因此,0.1 * 3和0.3是不同的。