Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-01-02, 23:46   #11
xyqustc
初级会员
 
注册日期: 2008-05-02
年龄: 38
帖子: 3
声望力: 0
xyqustc 正向着好的方向发展
默认 回复: [求助]简单的程序,诡异的结果。请高手们看一下。

在对任何双精度进行相等比较时,因该注意这样写 :abs(y1-y2)<eps;应为双精度存储不是准确的,只是近似值。该程序中,可以加入一句:s1=deadrate-0.9500,在fomat long 情况下可以看到第二次循环计算为1.1102e-016 :lol:
xyqustc 当前离线   回复时引用此帖
旧 2009-01-03, 09:08   #12
ziliang454618
初级会员
 
注册日期: 2008-01-13
年龄: 42
帖子: 2
声望力: 0
ziliang454618 正向着好的方向发展
默认 回复: [求助]简单的程序,诡异的结果。请高手们看一下。

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
ziliang454618 当前离线   回复时引用此帖
旧 2009-01-03, 10:56   #13
kingfox
初级会员
 
注册日期: 2008-02-15
年龄: 53
帖子: 4
声望力: 0
kingfox 正向着好的方向发展
默认 回复: [求助]简单的程序,诡异的结果。请高手们看一下。

楼主犯了编码的大忌:对浮点数做相等比较。在计算机里面由于字长的限制,浮点数通常都是不精确的,例如,0.95只是理论上的值,在计算机里面表示的真实值其实可能是0.9499999这样的数字。而0.05可能也会表达成0.049999995这样的数字。所以,这种情况下做浮点数相等比较,特别是经过预算后的浮点变量与浮点常数做相等比较,出错的概率会很大的。所以一般都会采用abs(x-y) < eps这样的方法才能得到期望的结果。
kingfox 当前离线   回复时引用此帖
旧 2009-01-03, 15:07   #14
coffietree
初级会员
 
注册日期: 2008-05-29
年龄: 39
帖子: 7
声望力: 0
coffietree 正向着好的方向发展
默认 回复: [求助]简单的程序,诡异的结果。请高手们看一下。

学习了。谢谢了。
coffietree 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[求助]关于matlab与c#编程的问题!高手指点! neu_cnlj MATLAB论坛 2 2010-05-10 09:46
帮忙看一下这三两行程序 smart55427 MATLAB论坛 1 2008-12-18 23:23
[求助]bp神经网络(急) sosnyf621 MATLAB论坛 0 2008-12-03 16:21
GM(1,1) lvlianggan MATLAB论坛 2 2008-11-07 22:52
【求助】这个微分方程怎么写成函数文件呢? grasszhang MATLAB论坛 0 2007-08-30 15:25


所有时间均为北京时间。现在的时间是 01:45


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