mmu*_*oss 6 precision matlab numerical
如果执行以下代码,MATLAB会出错.有人可以验证吗?
floor([0.1:0.1:2]/0.01)
Run Code Online (Sandbox Code Playgroud)
那129在这做什么?
ans = 10 20 30 40 50 60 70 80 90 100 110 120 129 140 150 160 170 180 190 200
Run Code Online (Sandbox Code Playgroud)
由于冒号生成的向量,它是浮点舍入误差.
像拉斯曼说的那样,如果你这样做:
floor((0.1:0.1:2 + eps) / 0.01)
Run Code Online (Sandbox Code Playgroud)
不存在舍入错误.
但是,根据冒号运算符的工作原理,我建议您执行相同的计算:
floor([(1:20)/10] / 0.01)
Run Code Online (Sandbox Code Playgroud)
[ 编辑:根据Rasman的评论,我将补充说,后一种方法也适用于负值,而添加eps有时会失败 ]
最重要的是,最好使用带整数的冒号运算符来最小化舍入误差.
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |