| Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) | 
![]()  | 
	
| 		
			
			 | 
		#1 | 
| 
			
			 初级会员 
			
			
			
			注册日期: 2008-06-01 
				
				年龄: 43 
				
					帖子: 23
				 
				
				
				声望力: 18 ![]()  | 
	
	
	
		
		
			
			 
			
			程序如下: 
		
		
		
		
		
		
		
	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,请高手帮帮忙指导一下!!小女子非常感谢!!  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			 高级会员 
			
			
			
				
			
			注册日期: 2007-04-05 
				
				
				
					帖子: 199
				 
				
				
				声望力: 28 ![]() ![]() ![]() ![]()  | 
	
	
	
		
		
			
			 
			
			我试了一下,确实有点奇怪,搞不明白
		 
		
		
		
		
		
		
		
	 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 		
			
			 | 
		#3 | 
| 
			
			 普通会员 
			
			
			
			注册日期: 2008-04-12 
				
				年龄: 46 
				
					帖子: 67
				 
				
				
				声望力: 19 ![]()  | 
	
	
	
		
		
			
			 
			
			这是因为计算机计算精度问题,如果你是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,稍大的程序你就难以预料到会有什么结果出来。  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 |