2013-07-31 83 views
0

我已經寫滿數字的列向量pp的最後一個非零位的位置,例如:Matlab的:找到了一些

23.234000 
3.1237340 
4.4359000 

我想找到的名額小數點的右邊矢量中最小的非零數字佔據,在這種情況下,由於3.123734中的4,在這種情況下將爲6。然後,我想將矢量中的每個數字乘以10^6,以消除矢量中的所有小數。我想這樣做以消除舍入錯誤。完成這件事的最好方法是什麼?

+1

您能否通過消除舍入誤差來更詳細地描述您的意思?因爲這是舍入錯誤,會讓我說這是不可能的。你怎麼知道'3.1237340'實際上不是'3.12373400000000000009884'? – Dan

+1

我同意丹,在浮法/雙重表示中,任何數字都是最接近機器能夠代表的。有效數字的數量真的是重要因素,乘以1.0e6並不會真正改變精度。 – radarhead

+1

一些例子,爲什麼你必須小心二進制系統上的浮點數在這裏給出:[TMW:Floating-Point numbers](http://www.mathworks.de/de/help/matlab/matlab_prog/floating-點numbers.html) –

回答

2

實際值可能不同於實際顯示的。例如,考慮下面的例子:

>> x = 1.4 - [0.1; 0.09999999] 

x = 
    1.3000 
    1.3000 

MATLAB同時顯示值是1.3,但事實上,他們都不是。所以

>> x - 1.3 

ans = 
    -2.2204e-16 
    1.0000e-08 

我的建議是在一個固定的精度決定(例如6位數字),然後乘以相應的冪數。