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