随机数起点

时间:2013-06-19 20:18:54

标签: random awk

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)如何用上面的输出生成“起点”吗?

2 个答案:

答案 0 :(得分:1)

起点称为种子。它被赋予rand函数的第一次迭代。在该rand之后使用它在计算旧数字时得到的前一个值 - 生成下一个数字。使用素数作为种子是一个好主意。

答案 1 :(得分:1)

PRNGs(伪随机数发生器)通过保持某种内部状态产生随机值,这种内部状态可以通过一系列重复周期非常大的值前进,并且其连续值具有非常少的明显统计相关性,只要我们使用的更少。但是,它的价值观是一个确定性的序列。

“播种”PRNG基本上选择确定性序列中的哪一点开始。算法将采用作为种子传递的数字并计算(以某种算法特定的方式)从序列开始的位置。种子的实际价值是无关紧要的 - 算法不应该以任何方式依赖它。

但是,尽管种子值本身不直接参与PRNG算法,但它确实唯一地识别序列中的起始点,因此如果您给出特定种子然后生成一系列值,则再次播种value应该使PRNG生成相同的值序列。