获取指定范围内的随机数

CRT函数rand()返回一个整型随机数,在0到RAND_MAX之间平均分布。根据数学上的随机数理论,可以运用线性变换把整型随机数转化为指定范围内的随机数。如果对精度要求比较高,可以用浮点数或者双精度数进行这个线性变换:
#define  GetRandom(min,max) rand()*((float)((max)-(min)))/(float)(RAND_MAX)+(min)

http://msdn.microsoft.com/library/en-us/vclib/html/_crt__beginthread.2c_._beginthreadex.asp 中的求余变换
/*  GetRandom returns a random integer between min and max.  */
#define  GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))

有可能存在一定的误差。实际上,这个求余算法只是把 (0,RAND_MAX-(RAND_MAX% (int)(((max) + 1) - (min))))线性变换到( min, max ) 而已,误差的数学期望是((RAND_MAX % (int)(((max) + 1) - (min)))/RAND_MAX。如果RAND_MAX可以被范围整除,那么这个算法没有误差;在范围很小,并且min和max都是整数的时候,由于分母是RAND_MAX,所以这个算法的误差甚至可能比浮点数运算的舍入误差还要小。综上所述,上面的求余变换在指定的范围很小的时候可以作为一种可行的随机数产生方法。

转载于:https://www.cnblogs.com/Aimd/archive/2006/05/15/400710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值