leveldb隨機數生成器

轉載自: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時可以取得最佳效果。

源代碼分析

源代碼分析在原博文中有詳細解析。

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 7126
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章