每次调用rand()金沙国际3016

当前位置:金沙国际3016 > 金沙国际3016 > 每次调用rand()金沙国际3016
作者: 金沙国际3016|来源: http://www.quzhouls.com|栏目:金沙国际3016

文章关键词:金沙国际3016,随机序列

  使用此代码,每次运行代码时,我都会得到相同的序列。但是,如果我添加的话,它会产生不同的随机序列。

  你得到同样的序列是因为rand()如果不调用,则自动使用a值1作为种子。srand().

  rand()将返回一个介于0和RAND_MAX(在标准库中定义)。使用模数操作员(%)给出除法的其余部分rand() / 100..这将迫使随机数在0-99范围内。例如,要得到0-999范围内的随机数,我们将应用rand() % 1000.

  兰德()返回伪随机数字。它根据给定的算法生成数字。该算法的起点总是相同的,因此您将看到为每次调用生成的相同序列。当您需要验证程序的行为和一致性时,这是非常方便的。

  属性设置随机生成器的“种子”。斯兰德函数(仅在程序中调用srand)从rand()生成器获取不同序列的一种常见方法是将种子设置为进程的当前时间或id:

  生成真正的随机性对于计算机来说是非常困难的,但是对于实际的非密码相关的工作,一种试图均匀分配生成的序列的算法工作得很好。

  srand()函数将其参数设置为rand()返回的伪随机整数序列的种子。通过调用具有相同种子值的srand(),这些序列是可重复的。

  所以,没有种子价值,rand()假设种子为1(在您的情况下每次),并且具有相同的种子值,rand()会产生同样的数字序列。

  这里有很多答案,但似乎没有人知道真的解释了为什么rand()总是在相同的种子中生成相同的序列,甚至是种子所做的事情。就这样吧。

  函数维护内部状态。从概念上讲,金沙国际3016您可以将其看作是名为rand_state的某种类型的全局变量。每次调用rand(),它都会做两件事。它使用现有状态计算新状态,并使用新状态计算返回给您的数字:

  现在您可以看到,每次调用rand()时,都会使rand_state沿着预先确定的路径移动一步。你看到的随机值只是基于你沿着这条路的位置,所以它们也会遵循一个预先确定的序列。

  从这一点可以看出,每次程序启动时,rand_state都将在初始化_state(这相当于生成_随机_state(1)开始-这就是为什么如果不使用srand(),总是得到相同的序列。

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!