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