Random 随机数起点

Random 随机数起点,random,awk,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)是如何用上述输出生成“起点”的?起点称为种子。它被赋予兰德函数的第一次迭代。在此之后,rand使用计算旧数字

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

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

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

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


但是,尽管种子值本身并不直接参与PRNG算法,但它确实唯一地标识了序列中的起始点,因此,如果您给出一个特定的种子,然后生成一个值序列,则再次使用相同的值进行种子设定应能使PRNG生成相同的值序列。

请参见“关闭”,但不完全如此。随机数生成器保持某种内部状态,并通过每次调用该状态来生成数字。该状态可能包含也可能不包含实际的先前输出。种子设定它使用给定的数字以依赖于算法的方式初始化该内部状态。忘了primes吧,如果它真的关心什么样的种子被传递,它已经绝望地破碎了。谢谢Lee和Jim。如果我理解正确,种子主要与PRNG的内部状态有关。它与生成的随机数的下界无关。要在a和b之间生成一个随机数,我应该使用a+rand()*(b-a)。我说的对吗?@Lee Daniel Crocker-FWIW-计算过程中产生的内部值。不一定是输出。这真的没关系——如果我的句子没有正确地表达意思,那么它在这方面就失败了。谢谢+1.