Matlab计算精确度问题?
发布网友
发布时间:2022-04-28 22:19
我来回答
共2个回答
热心网友
时间:2022-06-24 00:18
对计算机语言而言,浮点数计算肯定丢失精度的。或者说,两个浮点数不能直接相等。这在计算机专业里是一个常识。
或者可以这么解释吧,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吧。
热心网友
时间:2022-06-24 00:18
float运算确实会有这种问题,跟算法也有关系
你设循环停止的时候可以让误差小于1e-10,近似等于0就好啦追问啥叫float运算?那我在matlab上面打0.4-0.1-0.3它不给我等于0那不是扯淡嘛。。。。是不是有什么设置出错啊
追答float就是浮点运算,计算机本身是不会float型运算的,它需要把float转换到整形运算,运算完了再转换回来,不同的运算器的算法略有不同