awk
手册说srand
“设置rand()
”的种子(起点)。我使用srand(5)
和以下代码:
awk 'BEGIN {srand(5);while(1)print rand()}'> /var/tmp/rnd
它生成如下数字:
0.177399
0.340855
0.0256178
0.838417
0.0195347
0.29598
你能解释srand(5)
如何用上面的输出生成“起点”吗?
答案 0 :(得分:1)
起点称为种子。它被赋予rand函数的第一次迭代。在该rand之后使用它在计算旧数字时得到的前一个值 - 生成下一个数字。使用素数作为种子是一个好主意。
答案 1 :(得分:1)
PRNGs(伪随机数发生器)通过保持某种内部状态产生随机值,这种内部状态可以通过一系列重复周期非常大的值前进,并且其连续值具有非常少的明显统计相关性,只要我们使用的更少。但是,它的价值观是一个确定性的序列。
“播种”PRNG基本上选择确定性序列中的哪一点开始。算法将采用作为种子传递的数字并计算(以某种算法特定的方式)从序列开始的位置。种子的实际价值是无关紧要的 - 算法不应该以任何方式依赖它。
但是,尽管种子值本身不直接参与PRNG算法,但它确实唯一地识别序列中的起始点,因此如果您给出特定种子然后生成一系列值,则再次播种value应该使PRNG生成相同的值序列。