c++ - 了解 rand() 操作

标签 c++

http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ ,我阅读了以下内容:该算法使用种子生成系列,应该使用 srand 将其初始化为一些独特的值。

seed 是什么意思,rand() 是如何使用 seed 生成序列的?

最佳答案

rand() 使用所谓的 pseudo-random number generator .它生成的不是真正的随机数,而是看起来看起来足够随机并满足某些统计特性的确定性序列。种子本质上是该序列的起始值;给定相同的种子,PRNG 将始终产生相同的序列。这就是为什么您经常使用不太确定性的东西作为种子,例如当前时间(尽管如果您在紧密循环中重新播种 PRNG 或以足够快的速度连续或并行运行程序,则会失败)。

在大多数情况下,C 中的 PRNG 是一个简单的 linear congruential generator .它使用以下等式计算序列中的下一个数字:

enter image description here

ab 是必须谨慎选择的值,以避免 horrible results .例如,出于显而易见的原因,2 对于 a 来说是一个非常非常糟糕的选择。 c只是将数减少到一定范围内,往往是2的幂。种子仅提供第 0 个值。

关于c++ - 了解 rand() 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715794/

相关文章:

c++ - 未定义对 Boost timer::auto_cpu_timer 的引用

C++ 自定义 std::map<> 键类导致内存冲突

c++ - 实例如何将自身添加到 vector 中?

c++ - 编写此指针函数代码的长格式是什么?

C++游戏对按键没有时间响应

c++ - 煤渣和 C++ : Mirror Texture and Efficient Drawing Questions

c++ - 使用派生参数覆盖函数

c++ - 定义 static const std::string 类变量

c++ - 如何调整椭圆的大小,使其始终触及左右边界?

c++ - 使用const bool删除调试信息时的编译器优化