#include <time.h>
((unsigned)time(NULL));
我不明白为什么在使用函数 srand() 创建伪随机数生成器时必须在程序中包含时间头文件并使用时间函数。有人可以解释一下在这种情况下时间的重要性吗?
*请注意,显示的代码只是程序的一部分。谢谢你。
这是因为Pseudorandom的Pseudo-部分。PRNG 对内部存储的种子值执行数学运算以产生下一个输出数并转换种子。
如果您不调用time(NULL)
或其他一些熵源(例如/dev/rand
),那么序列仍然是伪随机的(通过检查值不容易预测),但对于程序的每次运行来说都是完全相同的。因为,尽管准确预测下一个数字可能非常困难,但它是可能的,因为 PRNG 是确定性的。
如果您不提供自己的种子srand()
,则默认初始种子通常为1。
该time()
调用提供了初始的熵源,使初始种子变得不可预测。
它使代码在第二次调用时不可重复。如果您不包含种子或种子的固定数,则程序将完全相同,因为随机数将是相同的。