Matlab计算精确度问题?
我在CommandWindow里面输入0.4-0.3-0.1,得出的结果是ans=2.7756e-017不是0。。。。。。。到底怎么回事?因为今天设置循环的时候怎么弄也不...
我在Command Window里面输入0.4-0.3-0.1,得出的结果是 ans = 2.7756e-017不是0。。。。。。。到底怎么回事? 因为今天设置循环的时候怎么弄也不对,才发现这个问题的,请高手解答啊,是设置问题嘛?
展开
展开全部
对计算机语言而言,浮点数计算肯定丢失精度的。或者说,两个浮点数不能直接相等。这在计算机专业里是一个常识。
或者可以这么解释吧,MATLAB中存储的数据不是连续的(也无法达到连续),两个浮点数的精度也是不相等的。比如,比1大的最小数就是1+eps(1),比2大的最小数就是1+eps(2)。
那么,这种不连续的存储必然导致一些舍入误差。1/3的浮点存储就不会是精确的1/3,所以有时候1.0/3*3不会等于1,而是等于0.99999.....
Matlab中默认是双精度浮点类型(double),这个精度已经很高了。可以通过对应的设置来避免这种浮点计算误差。
或者可以这么解释吧,MATLAB中存储的数据不是连续的(也无法达到连续),两个浮点数的精度也是不相等的。比如,比1大的最小数就是1+eps(1),比2大的最小数就是1+eps(2)。
那么,这种不连续的存储必然导致一些舍入误差。1/3的浮点存储就不会是精确的1/3,所以有时候1.0/3*3不会等于1,而是等于0.99999.....
Matlab中默认是双精度浮点类型(double),这个精度已经很高了。可以通过对应的设置来避免这种浮点计算误差。
追问
如何设置啊,我知道浮点数会有误差,1/3*3可能不等于1,但那个是除法啊,我简单的减法运算都不行?0.5-0.2-0.3=0而0.4-0.1-0.3却不等于0?
追答
确实是有点意思。
你用的哪个版本啊?我的2011b也是这样。
好像是这个0.1的存储有问题?可能算是个bug吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询