随机数---秒及毫秒级随机数种子(C++)

来源:互联网 发布:电脑tv电视直播软件 编辑:程序博客网 时间:2024/05/16 10:44

一、函数
1、rand
函数原型: int rand(void);
所在头文件: stdlib.h
功能描述: rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int),用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的,若要不同,用函数srand()初始化它。

2、srand
函数原型: void srand(unsigned int seed);
所在头文件: stdlib.h
功能描述: srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

3、time
函数原型: time_t time(time_t *t);
所在头文件: time.h
返回值:成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno 中
功能描述: 此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存。

4、ftime
函数原型: int ftime(struct timeb *tp);
所在头文件: sys/timeb.h
返回值:无论成功或失败都返回0
功能描述: ftime()将目前日期由tp所指的结构返回。tp结构定义:

struct   timeb{       time_t   time;                    /* 为1970-01-01至今的秒数*/       unsigned   short   millitm;       /* 千分之一秒即毫秒 */       short   timezonel;       /* 为目前时区和Greenwich相差的时间,单位为分钟 */       short   dstflag;         /* 为日光节约时间的修正状态,如果为非0代表启用日光节约时间修正 */};

二、代码实例:

1、以秒为随机数种子

unsigned int tseed = time(NULL);srand(tseed);unsigned int crand = rand();

2、以秒为随机数种子产生一定范围内的数值

unsigned int tseed = time(NULL);srand(tseed);// 生成[b,a]范围内的数值,包括b和aunsigned int range = a - b + 1;unsigned int crand = rand() % range + b;// 生成[b,a)范围内的数值,包括b,不包括aunsigned int range = a - b;unsigned int crand = rand() % range + b;

3、以毫秒为随机数种子

struct timeb timeSeed;ftime(&timeSeed);srand(timeSeed.time * 1000 + timeSeed.millitm);  // milli timeunsigned int crand = rand();

4、以毫秒为随机数种子产生一定范围内的数值

struct timeb timeSeed;ftime(&timeSeed);srand(timeSeed.time * 1000 + timeSeed.millitm);  // milli time// 生成[b,a]范围内的数值,包括b和aunsigned int range = a - b + 1;unsigned int crand = rand() % range + b;// 生成[b,a)范围内的数值,包括b,不包括aunsigned int range = a - b;unsigned int crand = rand() % range + b;