我執行該代碼的載體,但我希望它不工作:獲取浮點數的指數
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
爲什麼它不起作用?我該如何讓它按照我的意願工作?
謝謝。
我執行該代碼的載體,但我希望它不工作:獲取浮點數的指數
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
爲什麼它不起作用?我該如何讓它按照我的意願工作?
謝謝。
這是比較常用的浮動。嘗試A(4)-1.3
。它會給你一些小但不是零的東西。這是因爲浮標具有有限的精度。一般來說,最好不要測試與花車平等。
通常的方法是定義一個小容差(例如1e-9
),並以比較寬容到:
abs(A-1.3)<1e-9
實用提示:如果您經常在相同的數字範圍內工作(如我),您可以定義一個名爲'epsilon'或'eps'的函數例如,並確保它始終在你的道路上。函數做的唯一事情就是返回類似'1e-9'的東西,它可以讓你輕鬆而一致地進行這種比較。如果您嘗試查找進行浮點比較的地方,也可以幫助您。 –
這是因爲雙精度。嘗試format long g
再次看看A,你會發現它不完全是1.3。看看MATLAB wiki瞭解這是爲什麼。對浮點數做平等測試絕不是一個好主意。
0.1具有寫在基體2時的無限擴展: 0.000110011001100110011001100110011001100110011001100110011001100
殼代碼以獲得:
bc -lq
obase=2
1/10
Matlab的將截斷到50個數字(?)。因此,0.1 * 3和0.3是不同的。
您可能想閱讀一篇有關[浮點比較Matlab]的文章(http://matlabgeeks.com/tips-tutorials/floating-point-comparisons-in-matlab/) – jkshah
並且:http:// docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – sebastian