【问题标题】:using the time function for srand in pseudo-random number generator in c在c中的伪随机数生成器中使用srand的时间函数
【发布时间】:2013-07-25 18:03:53
【问题描述】:
#include <time.h>
((unsigned)time(NULL));

我不明白为什么在使用函数 srand() 创建伪随机数生成器时必须在程序中包含时间头文件并使用时间函数。有人可以解释一下在这种情况下时间的重要性吗?

* 请注意,显示的代码只是程序的一部分。谢谢你。

【问题讨论】:

    标签: c random srand


    【解决方案1】:

    这是因为 PseudorandomPseudo- 部分。 PRNG 对内部存储的 seed 值执行数学运算,以产生下一个输出数字并转换种子。

    如果您不调用time(NULL) 或其他一些熵源(例如/dev/rand),那么序列仍将是伪随机(通过检查值不容易预测),但每次运行程序都会完全相同。因为,尽管准确预测下一个数字可能非常困难,但它可能的,因为 PRNG 是确定性

    如果您不使用srand() 提供自己的种子,则默认初始种子通常是1

    time() 调用提供了熵的初始源,它使起始种子变得不可预测。

    【讨论】:

    • 确定性部分其实很有用。我给draw a picture of random trees写了一个程序,因为它打印了每张图像的种子值,所以可以通过重新使用相同的种子重新生成相同的图片(除非更改程序更改了rand的使用或数字对rand 的调用,因为这些将改变流经程序的数字模式)。尤其是调试 bad 运行时,能够重新启动相同的序列非常非常有用。
    【解决方案2】:

    它使代码在第二次调用时不可重复。如果您不包含种子或种子的固定数,则程序的行为将完全相同,因为随机数将是相同的。

    【讨论】:

      猜你喜欢
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多