简体   繁体   中英

Matlab gives wrong answer

If the following code is executed MATLAB makes a mistake. Can someone verify this?

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

So what is the 129 doing here??

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

It is a floating point rounding error because of the colon-generated vector.
Like Rasman said, if you do:

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

There will be no rounding errors.

However, based on how the colon operator works , I suggest that you do the same calculation like this:

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

[ Edit : following Rasman's comment, I will add that the latter approach works for negative values as well, while adding eps sometimes fails ]

The bottom line is that it is better using the colon-operator with integer numbers to minimize rounding errors.

它可能正在进行浮点计算,导致不精确的值为129.99999999999999 ...而不是130.然后将其置于129。

it's a rounding approximation brought on by the array construction. The solution would be to add eps:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM