计算机产生的随机数并不是真正随机的,所以叫
伪随机数。
当“种子”固定时,它产生的随机数序列是不变的,例如产生10个数,这10个数大小是变化的,但只要用这个种子,每次产生的这10个数序列,是一模一样的。
用
srand(time(0));
设种子,就会因时间变化,得到不同的种子,那么随机数序列就会变化。
time(0)
是当前时间,(精度可能是毫秒)。只要两次跑程序启动时间差别
超过1毫秒,两个序列就不同了(随机)。如果,时间差别不到1毫秒,两个序列就没变化。
--------
错误的程序:
for
(i=0;i<5;i++){
srand(time(0));
//
5次的种子若不变
printf("%d
",rand());
//
依次取
5个序列的
第一个数
}
5个数不变化。
-------------------
正确的程序:
srand(time(0));
//
设1次种子
for
(i=0;i<5;i++){
printf("%d
",rand());
//依次取1个序列的第1到第5个随机数
}
5个数变化
这是用于初始化随机函数发生器的,计算机中的随机函数在生成一个随机数时需要用到一个称为随机数发生器的东西,如果不对其进行初始化,每次生成的随机数就会是相同的。
srand函数就用来初始化这个发生器,参数time(0)能够生成从1970年1月1日到当前机器时间的秒数,这个数在你每次执行程序的时候都会不断增长、变化,所以用它当做种子来初始化发生器,就会生成不同的随机数了。