matlab 判断不等式>> (1-1)*(1-1)+(0-0.2)*(0-0.2)==0.04ans =0为什么会是ans=0呢...就问啊

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 04:24:33

matlab 判断不等式>> (1-1)*(1-1)+(0-0.2)*(0-0.2)==0.04ans =0为什么会是ans=0呢...就问啊
matlab 判断不等式
>> (1-1)*(1-1)+(0-0.2)*(0-0.2)==0.04
ans =
0
为什么会是ans=0呢...就问啊

matlab 判断不等式>> (1-1)*(1-1)+(0-0.2)*(0-0.2)==0.04ans =0为什么会是ans=0呢...就问啊
计算机误差造成的,这样的例子很多.
主要原因是计算中有小数,按照双精度储存,计算中会有截断误差,试试下面:
0.2*0.2-0.04
ans =
6.9389e-18
对于这种问题,不要直接判断相等,给一个误差限就好,判断相等改为
abs((1-1)*(1-1)+(0-0.2)*(0-0.2)-0.04)

是舍入误差的问题,和c语言一样
判断两个浮点数是否相等要判断两数的差是不是小于某个小值
abs((1-1)*(1-1)+(0-0.2)*(0-0.2)-0.04)ans =
1
eps是系统定义的浮点误差,两数差小于则个值,说明在舍入误差的范围内,两值相等
或者
sym((1-1)*(1-1)+(0-0.2)*(0-0.2...

全部展开

是舍入误差的问题,和c语言一样
判断两个浮点数是否相等要判断两数的差是不是小于某个小值
abs((1-1)*(1-1)+(0-0.2)*(0-0.2)-0.04)ans =
1
eps是系统定义的浮点误差,两数差小于则个值,说明在舍入误差的范围内,两值相等
或者
sym((1-1)*(1-1)+(0-0.2)*(0-0.2))==0.04
ans =
1
用符号运算,就可以得到精确的解,能够用==判断是否相等

收起