簡體   English   中英

Matlab給出了錯誤的答案

[英]Matlab gives wrong answer

如果執行以下代碼,MATLAB會出錯。 有人可以驗證嗎?

floor([0.1:0.1:2]/0.01)

那129在這做什么?

ans = 10 20 30 40 50 60 70 80 90 100 110 120 129 140 150 160 170 180 190 200

由於冒號生成的向量,它是浮點舍入誤差。
像拉斯曼說的那樣,如果你這樣做:

floor((0.1:0.1:2 + eps) / 0.01)

不存在舍入錯誤。

但是,根據冒號運算符的工作原理 ,我建議您執行相同的計算:

floor([(1:20)/10] / 0.01)

[ 編輯根據Rasman的評論,我將補充說,后一種方法也適用於負值,而添加eps有時會失敗 ]

最重要的是,最好使用帶整數的冒號運算符來最小化舍入誤差。

它可能正在進行浮點計算,導致不精確的值為129.99999999999999 ...而不是130.然后將其置於129。

它是陣列結構帶來的舍入近似值。 解決方案是添加eps:

floor([0.1:0.1:2]/0.01+ eps([0.1:0.1:2]/0.01))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM