lovegirlmeijie 发表于 2008-8-29 11:15

头疼的小程序(关于floor)

程序如下:
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 编辑 ]

sigma665 发表于 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 编辑 ]

lovegirlmeijie 发表于 2008-8-29 15:53

楼上的帮助解决问题了,但是我还是有点不明白,在matlab直接运行0.3/0.05,结果也是6,为什么用floor函数结果就变成5了,而用round函数结果就是6?matlab真的有些高深莫测!!

[ 本帖最后由 lovegirlmeijie 于 2008-8-29 15:56 编辑 ]

sigma665 发表于 2008-8-29 15:56

回复 板凳 lovegirlmeijie 的帖子

这个问题,我不知道

rocwoods 发表于 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
楼主应该查看帮助了解其用法

yelv123 发表于 2008-8-29 16:41

这个以前确实没有怎么注意,不错
跟c一样,2/3结果为0,2.0/3就是0.6666666

baoliang747 发表于 2008-8-31 07:51

哈哈,学到了很多啊

ChaChing 发表于 2009-12-23 20:34

原帖由 yelv123 于 2008-8-29 16:41 发表 http://www.chinavib.com/forum/images/common/back.gif
...跟c一样,2/3结果为0,2.0/3就是0.6666666
这个对应说法, 不太对! 值得商榷

friendchj 发表于 2009-12-30 03:53

回复 6楼 yelv123 的帖子

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

goodstudent 发表于 2010-1-11 22:22

不错,很清楚
页: [1]
查看完整版本: 头疼的小程序(关于floor)