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)

xyqustc 2009-01-02 23:46

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
在对任何双精度进行相等比较时,因该注意这样写 :abs(y1-y2)<eps;应为双精度存储不是准确的,只是近似值。该程序中,可以加入一句:s1=deadrate-0.9500,在fomat long 情况下可以看到第二次循环计算为1.1102e-016 :lol:

ziliang454618 2009-01-03 09:08

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
clc;clear all;
deadrate=0.9;
for i=1:2
i
deadrate
t1=abs(deadrate-0.95)<=eps
t2=abs(deadrate-0.9)<=eps
if t1 || t2
disp('||')
deadrate = deadrate+0.0500
else
disp('else')
deadrate = deadrate+0.1
end
end

kingfox 2009-01-03 10:56

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
楼主犯了编码的大忌:对浮点数做相等比较。在计算机里面由于字长的限制,浮点数通常都是不精确的,例如,0.95只是理论上的值,在计算机里面表示的真实值其实可能是0.9499999这样的数字。而0.05可能也会表达成0.049999995这样的数字。所以,这种情况下做浮点数相等比较,特别是经过预算后的浮点变量与浮点常数做相等比较,出错的概率会很大的。所以一般都会采用abs(x-y) < eps这样的方法才能得到期望的结果。

coffietree 2009-01-03 15:07

回复: [求助]简单的程序,诡异的结果。请高手们看一下。
 
学习了。谢谢了。


所有时间均为北京时间。现在的时间是 11:27

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