2017-02-17 80 views
0

在一個循環中,足以將種子設置一次以獲得隨機數序列。函數rand如何僅基於一個種子生成很多隨機數?rand()如何從單個種子生成一個隨機數序列?

+0

相關:[rand()如何工作?它有一定的傾向嗎?有什麼更好的使用?](http://stackoverflow.com/questions/3539398/how-does-rand-work-does-it-have-certain-tendencies-is-there-something-better) – user4581301

+1

如何做斐波那契從1開始產生很多數字?從繼承中的一個元素到下一個元素有一條簡單的規則;而在「蘭特」的情況下,數字*看起來非常隨機(對於偶然的觀察者和根據一些基本的統計測試)。 –

+0

你總是從rngs得到一個序列,實際上它是rngs的一個重要特徵,即它們總是以相同的種子產生相同的序列。畢竟他們不是隨機的 – user463035818

回答

2

您只需要一種算法將一個數字轉換爲兩個數字。一個數字成爲你的下一個輸出,另一個成爲你的下一個種子。這樣的算法非常簡單。例如,可以將數字乘以兩個不同的素數,然後減少每個模態65536.這將從單個輸入產生兩個輸出。

另一種方法是更簡單:

1)置換的種子通過由一個數乘以它並加入第二個數字。 (例如,seed = seed * 214013 + 2531011;。)

2)僅輸出新種子的一部分。 (例如,return (seed >> 16) &0x7ffff;。)

0

它實際上是Pseudorandom,數字顯示爲隨機但不是,它們是確定性的,因爲它們可以由算法預測。真正的隨機數字無法預測。使用相同的種子將產生相同的序列。該標準規定了算法,但所用的actual algorithm取決於實現。