rand()如何从单个种子生成一系列随机数?

时间:2017-02-17 22:47:41

标签: c++ random srand random-seed

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

2 个答案:

答案 0 :(得分:2)

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

另一种方法更简单:

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

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

答案 1 :(得分:0)

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