看到有同事在用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进行初始化,否则每次出来的随机序列可是一样的。呵呵,用时间值进行初始化也不一定保险,特别是用在博彩系统中,曾有人根据系统启动时间推算出随机数种子的例子。有必要的话,建议各位加上别的因素(比如对鼠标进行采样等)进行随机数种子的初始化工作。