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。。。。。。。到底怎么回事? 因为今天设置循环的时候怎么弄也不对,才发现这个问题的,请高手解答啊,是设置问题嘛? 展开
 我来答
lxnsw007
2011-12-05 · TA获得超过1823个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:415万
展开全部
对计算机语言而言,浮点数计算肯定丢失精度的。或者说,两个浮点数不能直接相等。这在计算机专业里是一个常识。

或者可以这么解释吧,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吧。
fancy1228
2011-12-05 · TA获得超过317个赞
知道小有建树答主
回答量:437
采纳率:0%
帮助的人:332万
展开全部
float运算确实会有这种问题,跟算法也有关系
你设循环停止的时候可以让误差小于1e-10,近似等于0就好啦
追问
啥叫float运算?那我在matlab上面打0.4-0.1-0.3它不给我等于0那不是扯淡嘛。。。。是不是有什么设置出错啊
追答
float就是浮点运算,计算机本身是不会float型运算的,它需要把float转换到整形运算,运算完了再转换回来,不同的运算器的算法略有不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式