【问题标题】:How does rand() generate a sequence of random numbers from a single seed? [closed]rand() 如何从单个种子生成随机数序列? [关闭]
【发布时间】:2017-02-17 22:47:40
【问题描述】:

在一个循环中,只需设置一次种子即可获得一系列随机数。 rand 函数如何仅基于一个种子生成大量随机数?

【问题讨论】:

标签: c++ random srand random-seed


【解决方案1】:

您所需要的只是一种将一个数字变成两个数字的算法。一个数字成为您的下一个输出,另一个成为您的下一个种子。这样的算法非常简单。例如,您可以将数字乘以两个不同的素数,然后将每个 mod 65536 减少。这将从单个输入产生两个输出。

另一种方法更简单:

1) 通过将种子乘以一个数字并添加第二个数字来置换种子。 (例如,seed = seed * 214013 + 2531011;。)

2) 仅输出部分新种子。 (例如,return (seed >> 16) &0x7ffff;。)

【讨论】:

    【解决方案2】:

    实际上是Pseudorandom,数字看起来是随机的,但不是,它们是确定性的,因为它们可以被算法预测。无法预测真正的随机数。使用相同的种子将产生相同的序列。标准规定和算法,但使用的actual algorithm 将取决于实现。

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 2022-01-06
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多