Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-08-29, 11:13   #1
ruanruan
初级会员
 
注册日期: 2008-06-01
年龄: 42
帖子: 23
声望力: 17
ruanruan 正向着好的方向发展
默认 [求助]小程序怎么出现令人费解的问题?

程序如下:
for j=0.05:0.05:0.7
h=floor(j/0.05);
S1(:,h)=j/0.05;
end
不知道为什么这段小程序的结果很奇怪,按照正常应该得到1-14,但是实际运行结果却是1,2,3,4,6,0,7,8,……。
我单步运行看了看,当j=0.3的时候,自动会把第五列替换成6,并且把第六列幅值0,请高手帮帮忙指导一下!!小女子非常感谢!!
ruanruan 当前离线   回复时引用此帖
旧 2008-08-29, 20:46   #2
yesman
高级会员
 
yesman 的头像
 
注册日期: 2007-04-05
帖子: 199
声望力: 28
yesman 即将成为的新星yesman 即将成为的新星yesman 即将成为的新星yesman 即将成为的新星
默认 回复: [求助]小程序怎么出现令人费解的问题?

我试了一下,确实有点奇怪,搞不明白
yesman 当前离线   回复时引用此帖
旧 2008-08-29, 22:54   #3
remnant
普通会员
 
注册日期: 2008-04-12
年龄: 46
帖子: 67
声望力: 19
remnant 正向着好的方向发展
默认 回复: [求助]小程序怎么出现令人费解的问题?

这是因为计算机计算精度问题,如果你是32位计算机那么就尝试一下64位机器上是否如你所愿。
在command window可以看到matlab给j的赋值:
j1 = (0.05:0.05:0.7)'

j1 =
5.000000000000000e-002
1.000000000000000e-001
1.500000000000000e-001
2.000000000000000e-001
2.500000000000000e-001
3.000000000000000e-001
3.500000000000000e-001
3.999999999999999e-001 %%%%% 这里,经过matlab运算后4->3.999999999999
4.500000000000000e-001
4.999999999999999e-001 %%%%% 这里,同上
5.499999999999999e-001 %%%%% 这里,同上
6.000000000000000e-001
6.499999999999999e-001 %%%%% 这里,同上
7.000000000000000e-001



floor等舍入函数用的时候要谨慎,因为3.999999999999会被舍入成为3,稍大的程序你就难以预料到会有什么结果出来。
remnant 当前离线   回复时引用此帖
回复


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

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



所有时间均为北京时间。现在的时间是 20:08


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