MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [求助]简单的程序,诡异的结果。请高手们看一下。 (https://www.labfans.com/bbs/showthread.php?t=5831)

cleverliu 2008-12-14 05:44

[求助]简单的程序,诡异的结果。请高手们看一下。
 
deadrate=0.90
for i=1:2
if (deadrate==0.9500)||(deadrate==0.9)
deadrate = deadrate+0.0500
else
deadrate = deadrate+0.1
end
end
正确结果应该是1,但是程序运行的结果是1.05。很奇怪,不知道为什么??

mathjiang 2008-12-14 09:37

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
的确奇怪,除了误差这个原因外没别法解释。

debateshang 2008-12-14 13:10

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
[QUOTE=cleverliu;21978]deadrate=0.90
for i=1:2
if (deadrate==0.9500)||(deadrate==0.9)
deadrate = deadrate+0.0500
else
[COLOR="Magenta"]deadrate = deadrate+0.1[/COLOR]
end
end
正确...[/QUOTE]

你这个不是循环两次吗,第一次的时候 deadrate已经是0.95了所以在进行判断的时候执行else命令
那不是0.95+0.1么正好是1.05呀;
如果你把i=1:100最后结果还是10.8500呢,这不是什么误差的问题,只是你的程序你没有完全明白

zhoumath 2008-12-17 14:44

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
我感觉也应该是1.0啊,虽然第一次循环的结果是0.9500,当时第二次循环时间仍然满足if的条件啊!为什么运行的是else语句呢?

feilove 2008-12-17 23:24

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
为什么正确结果是1呢???
应该是1.05啊。0.05>eps
所以应该是0.9+0.05+0.1啊

lwym126 2008-12-18 18:51

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
应该是0.05这个数据在问题

remnant 2008-12-20 00:12

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
三楼正解。for语句循环两次,第一次进入if,第二次进入else.最后是1.05.如果lz要达到期望结果,需要break for循环。

mathjiang 2009-01-02 17:47

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
关键是第二次为什么进入else?
这个没有人说明白了。

mathjiang 2009-01-02 17:48

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
进入else的唯一原因就是matlab计算误差问题。

lingyun422 2009-01-02 22:35

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
自问没有明白为什么第二次判断时条件式为什么为假了?


所有时间均为北京时间。现在的时间是 05:21

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.