声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2167|回复: 9

[编程技巧] 头疼的小程序(关于floor)

[复制链接]
发表于 2008-8-29 11:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
程序如下:
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,请高手帮帮忙指导一下!!小女子非常感谢!!


[ 本帖最后由 sigma665 于 2008-8-29 12:06 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-8-29 11:59 | 显示全部楼层
j=0.05:0.05:0.7;
S1=j/0.05;
这样就行了


floor(0.3/0.05)=5
round(0.3/0.05)=6

[ 本帖最后由 sigma665 于 2008-8-29 12:06 编辑 ]
 楼主| 发表于 2008-8-29 15:53 | 显示全部楼层
楼上的帮助解决问题了,但是我还是有点不明白,在matlab直接运行0.3/0.05,结果也是6,为什么用floor函数结果就变成5了,而用round函数结果就是6?matlab真的有些高深莫测!!

[ 本帖最后由 lovegirlmeijie 于 2008-8-29 15:56 编辑 ]
发表于 2008-8-29 15:56 | 显示全部楼层

回复 板凳 lovegirlmeijie 的帖子

这个问题,我不知道
发表于 2008-8-29 16:27 | 显示全部楼层
floor是向下取整,a = floor(b),a得到的是小于等于b的最大整数。如果b是整数,那么自然a=b.
否则,即时b = 5.999999999999999,那么a = floor(b)也会得到5.
我们知道小数在计算机中表示是有误差的,0.3/0.05计算结果在计算机中并不是精确的以6来表示,这和12/2不同。
楼主运行format long后再运行0.3/0.05就知道了。
至于round是我们通常用到的四舍五入。
类似的函数还有ceil,fix
楼主应该查看帮助了解其用法

评分

1

查看全部评分

发表于 2008-8-29 16:41 | 显示全部楼层
这个以前确实没有怎么注意,不错
跟c一样,2/3结果为0,2.0/3就是0.6666666
发表于 2008-8-31 07:51 | 显示全部楼层
哈哈,学到了很多啊
发表于 2009-12-23 20:34 | 显示全部楼层
发表于 2009-12-30 03:53 | 显示全部楼层

回复 6楼 yelv123 的帖子

matlab中默认的计算应该是浮点运算,及2/3相当于2.0/3.0。在其他语言中好像不一定,我记得在C中,2/3应该相当于两个整数相除求商,自然为0

评分

1

查看全部评分

发表于 2010-1-11 22:22 | 显示全部楼层
不错,很清楚
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 18:48 , Processed in 0.082512 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表