今天调试程序遇到一个奇怪的问题:
有这么一个循环,
for i= -2:0.1:1
if i==-0.2
break
end
...
end
可是每次执行都发现程序不会停止, 直到遍历结束. 等i等于-0.2的时候直接执行 i==-0.2, 发现结果竟然是0.也就是说matlab认为他们不相等.
后来才知道计算机在运算浮点数的时候总是有误差的. 虽然误差很小很小.
所以这时候不可以用==来评价了, 而是要看两者的差是否小于一个很小的值:
abs(-0.2-i) < eps
eps是浮点数的相对精度, 详情可以看这里.