转载自:https://yq.aliyun.com/articles/2271?spm=5176.8067842.tagmain.70.niznRr
原理
C语言中伪随机数生成算法实际上是采用了”线性同余法”。具体的计算如下: seed = (seed * A + C ) % M 其中A,C,M都是常数(一般会取质数)。当C=0时,叫做乘同余法。 假设我们定义随机数函数
void
rand(
int &
seed)
{
seed = (
seed * A + C) % M;
}
每次调用rand函数都会产生一个随机值赋值给seed,可以看出实际上用rand函数生成的是一个递推的序列,一切值都来源于最初的 seed。所以当初始的seed取一样的时候,得到的序列都相同。 我们称seed为种子,一个伪随机数常用的原则就是M尽可能的大。例如,对于32位的机器来说,选择M=2^31-1=2147483647, A=7^5=16807时可以取得最佳效果。
源代码分析
源代码分析在原博文中有详细解析。