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