如何产生指定范围的随机数

这两个函数的使用都要包含头文件stdio.h

rand()函数返回的是一个0到RAND_MAX的随机数,RAND_MAX 这是一个常数,它的值在windows和linux下是不同的。在我的机子上这个值是32767,也就是说,在我的机子上,rand() 这个函数会返回一个0到32767的随机数。(这里不讨论返回的是不是真正意义上的随机数的问题,只讨论它的用法。)

产生某个区间的随机数

如果我们需要这个函数产生某个区间的随机数怎么做呢?首先我们看看rand() 函数原型:int rand(void),可以看出这个函数不接受任何参数,那么怎么让他产生某个区间的随机呢?

通用的公式是这样的:n+rand()%m ,这个公式的意思产生区间[n,n+m)的随机数,即包括n到不包括m之间的随机数。由区间可以看出,式子中n 是区间的开始,m你想要的区间的差。 


这个通用公式也很容易理解,因为rand() 这个函数不接受任何参数,所以他本身始终表示0到RAND_MAX的随机数,所以我们可以在它产生缺省随机数的基础上加n,就是想要的区间的起始,在用m表示区间的结束。

 
需要注意的是,这样的产生的随机数缺省是左闭右开的:[n,m)

srand函数

这个函数通常和rand()函数配合使用以达到最好的随机数效果。它的原型是:void srand(unsigned int seed),为函数rand() 提供随机数种子。这个函数要在rand() 调用之前调用,才能达到应有的效果。

 

举例:


void rand_function(void)
{
	char param_out[256]={0};
	u8 data[256]={0};
	float n=0;
	u16 m=0;
	m= After_filter[0] %100;;
	srand(m);
	n=rand()%10+5;
  
	Coefficient=(float)(1/n);
	
//	sprintf(param_out,":n=%f,adc0=%d\r\n",n,After_filter[0]);
//	strcat((char*)data,param_out);	
//	USART1_SendData(data,100);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值