【发布时间】:2015-04-26 18:58:48
【问题描述】:
操作系统:Win 7 64 位。 Matlab:2014a,2015a
当我按如下方式创建向量时:
a = 0.2:0.2:1
我明白了:
a = 0.2000 0.4000 0.6000 0.8000 1.0000
这是预期的。现在,当我想查看向量中是否存在 0.6 时,我输入:
a == 0.6
我得到:0 0 0 0 0
find(a == 0.6) 也返回一个Empty matrix: 1-by-0
这些都是意料之外的。它能够找到所有其他值,但是对于 0.6 存在问题。我认为虽然创建了 0.6,但它实际上是 0.600000000000000001 或类似的东西,这是一个问题。您可以看到a > 0.6 是这种情况,并且会得到0 0 1 1 1。
1-首先为什么会这样?
2-Second 我们能在 Matlab 中看到一个数字的整个值吗?如果可以,它的功能或设置是什么?
我使用linspace 创建了相同的向量,但这也没有帮助。我通过键入:a = roundn(a, -10) 找到了解决方案。但是,我认为一开始就不需要这样的解决方案。
3-有没有更好的方法让 Matlab 产生精确的值?
感谢大家的帮助。
【问题讨论】:
-
使用符号数学。类型
double不能准确表示小数。 -
欢迎使用浮点编程。另请参阅:Why is 24.0000 not equal to 24.0000 in MATLAB? 并尝试
a = 0.2:0.2:1;a(3)-0.6。 -
谢谢你们。所以我认为这是一个问题,但如果是这样,那么它应该适用于每个值。它不适用于我的向量中的其他值。只到 0.6。严重的是,如果是这种情况,那我该怎么做比较?突然之间,一个简单的比较变成了一件麻烦事。
标签: matlab vector decimal-point significant-digits