2013-02-16 140 views
23

什麼是生成隨機數的種子?生成隨機數字的種子是什麼?

我需要生成數百到數千的隨機數,我已閱讀了很多關於使用「種子」的信息。什麼是種子?隨機數字是從哪裏開始的?例如,如果我將我的種子設置爲5,它會從5生成數字,無論我的限制是多少?所以它永遠不會給我3例如。

我使用的是C++,所以如果您提供了任何示例,它會很好,如果它在C++中。

謝謝!

回答

30

實際上通常稱爲隨機數序列的是「僞隨機」數字序列,因爲這些值是使用確定性算法計算的,並且概率不起作用。

「種子」是序列的起點,保證是如果你從相同的種子開始,你將得到相同的數字序列。這對於例如調試非常有用(當您在程序中尋找錯誤時,您需要能夠重現問題並進行研究,非確定性程序將更難以調試,因爲每次運行都會有所不同) 。

如果你需要的數字只是一個隨機序列,並不需要複製它,然後簡單地使用當前時間作爲種子...例如:

srand(time(NULL)); 
+0

嗯,是的,'srand'種子'蘭特()'。但TR1中的豐富的新隨機數發生器(好吧,不是那麼新的)和C++ 11都有自己的播種機制,並且不涉及「srand」。 – 2013-02-16 21:43:44

+0

@PeteBecker:我的猜測是,對於OP所需要的'srand/rand'綽綽有餘。 – 6502 2013-02-17 00:31:49

+0

是的,可能。儘管如此,播種不僅僅是「srand」。 '' – 2013-02-17 13:00:21

3

那麼,讓我們這麼說吧:

如果你和你的朋友設置種子等於相同的數字,那麼你和你的朋友將得到相同的隨機數。所以,如果我們所有的人寫這個簡單的程序:

#include<iostream> 
using namespace std; 
void main() { 
    srand(0); 
    for (int i=0; i<3; i++){ 
     int x = rand()%11;   //range between 0 and 10 
     cout<<x<<endl; 
    } 
} 

我們都將獲得這些都是一樣的隨機數(5,8,8)。

如果你想每次都得到differenct號碼,您可以使用函數srand(時間())