如果执行下面的代码MATLAB会犯一个错误。有人可以验证这一点?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
如果执行下面的代码MATLAB会犯一个错误。有人可以验证这一点?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
这是一个浮点舍入错误,因为冒号生成的向量。
像RASMAN说,如果你这样做:
floor((0.1:0.1:2 + eps)/0.01)
不会有舍入误差。
然而,根据how the colon operator works,我建议你做同样的计算是这样的:
floor([(1:20)/10]/0.01)
[编辑:以下RASMAN的评论,我会补充说,后一种方法适用于负值,同时加入eps
有时会失败]
底线是使用冒号运算符更好使用我nteger数字,以尽量减少舍入误差。
它可能做导致129.99999999999999的不精确值浮点运算...什么,而不是130,然后你地板它129
这是一个近似圆带来由阵列建设。解决方案将添加eps:
floor([0.1:0.1:2]/0.01+ eps([0.1:0.1:2]/0.01))
129.那个鬼鬼祟祟的混蛋。 –
也许我正在分裂头发,但是你能不能完成'10:10:200'? – kevlar1818
相关:[关于浮点精度:为什么迭代次数不相等?](http://stackoverflow.com/a/6478526/97160) – Amro