播种兰特()本身

时间:2015-06-28 16:05:59

标签: c random

如果程序使用DOSEN3 Traceback(most recent call last): file "skripsi.py", line 111, in<module> base(nomor) 生成一些数字,则存储最后rand()个结果,并且在重复运行时使用rand(),这会提供一些更短但仍然可用的随机数序列?

1 个答案:

答案 0 :(得分:2)

srand应该只运行一次。如果您多次初始化它,结果序列可能不是那么随机。

初始化PRNG的一个好方法是srand(time(NULL)*getpid());

或者你可以尝试:

timeval t;
gettimeofday(&t, NULL);
srand((t.tv_usec/100) + (t.tv_sec/100));//getpid is optional

说明:

  

PRNG(伪随机数生成器)生成确定性   数字序列取决于所使用的算法。给定的算法   将始终从给定的起点产生相同的序列   (种子)。如果您没有明确地看到PRNG那么通常会   每次运行应用程序时从相同的默认种子开始,   导致使用相同的数字序列。

     

要解决此问题,您需要使用不同的种子自行播种PRNG   (每个应用程序运行时给出不同的顺序)。该   通常的方法是使用time(NULL)来设置基于的种子   当前时间。只要你不启动两个实例   在一秒钟之内申请,你将得到保证   不同的随机序列。

     

每次想要新的随机数时都不需要对序列进行播种   数。而且我不确定这一点,但我有这样的感觉   取决于正在使用的PRNG算法为每个新的重新播种   数字实际上可能导致结果中的随机性降低   序列。   资料来源:link