leveldb随机数生成器

xiaoxiao2021-02-27  359

转载自: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时可以取得最佳效果。

源代码分析

源代码分析在原博文中有详细解析。

转载请注明原文地址: https://www.6miu.com/read-4793.html

最新回复(0)