2006-08-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()) / (RAND_MAX + 1);
}
// 获得一个0<=x<number之间的随机数(整数)
int random(int number)
{
    return (int)(rand() * number / (RAND_MAX + 1) );
}

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

没有评论:

发表评论