在 http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ ,我阅读了以下内容:该算法使用种子生成系列,应该使用 srand 将其初始化为一些独特的值。
seed 是什么意思,rand() 是如何使用 seed 生成序列的?
最佳答案
rand()
使用所谓的 pseudo-random number generator .它生成的不是真正的随机数,而是看起来看起来足够随机并满足某些统计特性的确定性序列。种子本质上是该序列的起始值;给定相同的种子,PRNG 将始终产生相同的序列。这就是为什么您经常使用不太确定性的东西作为种子,例如当前时间(尽管如果您在紧密循环中重新播种 PRNG 或以足够快的速度连续或并行运行程序,则会失败)。
在大多数情况下,C 中的 PRNG 是一个简单的 linear congruential generator .它使用以下等式计算序列中的下一个数字:
a 和 b 是必须谨慎选择的值,以避免 horrible results .例如,出于显而易见的原因,2 对于 a 来说是一个非常非常糟糕的选择。 c只是将数减少到一定范围内,往往是2的幂。种子仅提供第 0 个值。
关于c++ - 了解 rand() 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715794/