1

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

4

2 回答 2

1

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

于 2013-06-19T20:21:58.417 回答
1

PRNG(伪随机数生成器)通过保持某种内部状态来产生随机值,这种内部状态可以通过一系列重复周期非常大的值来推进,只要我们使用 far,它们的连续值几乎没有明显的统计相关性他们更少。但尽管如此,它的值是一个确定的序列。

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

但是,虽然种子值本身并不直接参与 PRNG 算法,但它确实唯一标识了序列中的起点,所以如果给定一个特定的种子,然后生成一个值序列,用相同的值再次播种应该会导致PRNG 生成相同的值序列。

于 2013-06-19T21:09:27.950 回答