头疼的小程序(关于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 编辑 ] 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 编辑 ] 楼上的帮助解决问题了,但是我还是有点不明白,在matlab直接运行0.3/0.05,结果也是6,为什么用floor函数结果就变成5了,而用round函数结果就是6?matlab真的有些高深莫测!!
[ 本帖最后由 lovegirlmeijie 于 2008-8-29 15:56 编辑 ]
回复 板凳 lovegirlmeijie 的帖子
这个问题,我不知道 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
楼主应该查看帮助了解其用法 这个以前确实没有怎么注意,不错
跟c一样,2/3结果为0,2.0/3就是0.6666666 哈哈,学到了很多啊 原帖由 yelv123 于 2008-8-29 16:41 发表 http://www.chinavib.com/forum/images/common/back.gif
...跟c一样,2/3结果为0,2.0/3就是0.6666666
这个对应说法, 不太对! 值得商榷
回复 6楼 yelv123 的帖子
matlab中默认的计算应该是浮点运算,及2/3相当于2.0/3.0。在其他语言中好像不一定,我记得在C中,2/3应该相当于两个整数相除求商,自然为0 不错,很清楚
页:
[1]