深入了解生成随机数的函数rand()

来源:互联网 发布:mac图片在哪里找到 编辑:程序博客网 时间:2024/04/28 00:12

百度知道:

C语言 问题:srand((unsigned)time(NULL));

我们知道在产生随机数的时候,需要一个叫做种子seed的值作为产生随机数算法的初始值。

而C/C++库中的srand就是为这一次的随机数生成设置种子。s代表的就是seed的意思。
time_t time(time_t *time);该函数返回自计算机计时的某个时刻起到现在所过去的秒数。
一般是返回自1970年1月1日00:00:00以来,到调用函数的时刻所累积的秒数。

所以综上所述:
srand((unsigned)time(NULL));
这语句的含义就是以自1970年1月1日00:00:00以来,到调用函数的时刻所累积的秒数作为
产生随机数算法的种子seed。 

没有语句会对程序产生什么影响:
如果在程序运行时没有自主设置种子的话,用函数rand产生的随机数序列会是一样的。
而用srand设置随机数种子后,可能产生不同的随机序列(概率很大)。

之所以说以很大的概率产生不同的随机数序列,是因为从上面的解释可以看到,

srand是以秒数为单位的。一旦程序多次运行的时间间隔少于1s。那么srand设置种子也没有什么用处。所以库函数产生随机数有一定的缺陷。不知道我解释明白了没有!


 百度知道:
c语言中 srand(time(NULL)); 这句话是什么意思(尤其是 NULL)?

  这是两个函数。一个是srand函数。这是在调用rand()这个函数之前使用的。rand()是一个产生随机数的函数。而srand是一个设置随机数种子的函数。通常这两个函数是一起使用的。来完成产生随机数的功能。
而time(NULL)这个函数的返回值是作为srand函数的参数的。意思是以现在的系统时间作为随机数的种子来产生随机数。至于NULL这个参数。只有设置成NULL才能获得系统的时间。

百度百科:
time()
time() 是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数。

主要用来获取当前的系统时间,返回的结果是一个time_t类型,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime函数将time_t所表示的UTC时间转换为本地时间(我们是+8区,比UTC多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。

定义:time_t time(time_t *t);
返回值: 返回一个包含当前时间的 Unix 时间戳的整数



0 0