2006年8月28日星期一

C随机函数的正确用法

  看到有同事在用rand()%100+1这样的方法试图获取一个1~100的随机数。虽然rand()出来的确实是一个整数,而且确实会大于100,但是要缩到1~100的区间可不是这样的。在C中正确的取随机数做法如下:

  首先,包含以下的头文件:

#include <time.h>
#include <stdlib.h>

  然后就可以声明并使用以下的随机数发生函数了,好好享受吧:

// 初始化随机数序列
void randomize(void)
{
srand((unsigned)time(NULL));
return;
}
// 获得一个0<=x<1之间的随机数(双精度)
double randf(void)
{
return (double)(rand()/(double)RAND_MAX);
}
// 获得一个0<=x<number之间的随机数(整数)
int random(int number)
{
return (int)(number/(float)RAND_MAX * rand());
}

  random之前别忘了先用randomize进行初始化,否则每次出来的随机序列可是一样的。呵呵,用时间值进行初始化也不一定保险,特别是用在博彩系统中,曾有人根据系统启动时间推算出随机数种子的例子。有必要的话,建议各位加上别的因素(比如对鼠标进行采样等)进行随机数种子的初始化工作。

没有评论:

发表评论