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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 15:14:50
matlab 判断不等式>> (1-1)*(1-1)+(0-0.2)*(0-0.2)==0.04ans =0为什么会是ans=0呢...就问啊
xTn@~cҪJ$]ʭP774 oEBST0iI1!/  E4J/س~6N&_L`t8E6ʃg&`4 ]\g<ڳQ&׈ Nf˸;jUCC,*z ("1ؑt"T9Wikmf~F 5)Nf ,Xmk.ᅤRg[ Έ01ieB`%,p``E2Qb=XE$Z)yTx"m"ֳ"7z=fs՗|` b[,@~Dht!&?2 Z2PFݧ{JsМ܎R)s"̼9|@*; xᄶYyȾ[ ~76q{1 F omK7guz8'B

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
用符号运算,就可以得到精确的解,能够用==判断是否相等

收起