2015-05-11 42 views
0

我一直在研究蘭德()的源代碼一段時間,但直到現在我無法弄清楚函數的全貌。什麼算法是基於C語言的Rand()?

以下是源代碼中發現和研究的我:

rand.c

random.c

有人能提供一些建議或幫助我嗎?

非常感謝!

+0

請參見[這裏](https://xkcd.com/221/) – Levi

+0

也許這個鏈接http://www.mathstat.dal.ca/~ selinger/random /? –

+0

注意[C99草案標準提供了一個示例實現](http://stackoverflow.com/a/26395067/1708801),但不需要特定的一個。 –

回答

0

它不是需要是基於任何具體算法,但很多人會用一個linear congruential算法生成的序列。這基本上沿着以下線改變種子:

seed = (seed * multiplier + adder) % modulo 

然後將種子的一部分作爲隨機值遞送。 multiplier,addermodulo的值可能會有所不同。

0

蘭德是基於幾個東西,如MAC地址,應在每臺機器上都是唯一的。有幾種實現來驗證返回值是「隨機的」