对计算机语言而言,浮点数计算肯定丢失精度的。或者说,两个浮点数不能直接相等。这在计算机专业里是一个常识。
或者可以这么解释吧,MATLAB中存储的数据不是连续的(也无法达到连续),两个浮点数的精度也是不相等的。比如,比1大的最小数就是1+eps(1),比2大的最小数就是1+eps(2)。
那么,这种不连续的存储必然导致一些舍入误差。1/3的浮点存储就不会是精确的1/3,所以有时候1.0/3*3不会等于1,而是等于0.99999.....
Matlab中默认是双精度浮点类型(double),这个精度已经很高了。可以通过对应的设置来避免这种浮点计算误差。
float运算确实会有这种问题,跟算法也有关系
你设循环停止的时候可以让误差小于1e-10,近似等于0就好啦