什麼是生成隨機數的種子?生成隨機數字的種子是什麼?
我需要生成數百到數千的隨機數,我已閱讀了很多關於使用「種子」的信息。什麼是種子?隨機數字是從哪裏開始的?例如,如果我將我的種子設置爲5,它會從5生成數字,無論我的限制是多少?所以它永遠不會給我3例如。
我使用的是C++,所以如果您提供了任何示例,它會很好,如果它在C++中。
謝謝!
什麼是生成隨機數的種子?生成隨機數字的種子是什麼?
我需要生成數百到數千的隨機數,我已閱讀了很多關於使用「種子」的信息。什麼是種子?隨機數字是從哪裏開始的?例如,如果我將我的種子設置爲5,它會從5生成數字,無論我的限制是多少?所以它永遠不會給我3例如。
我使用的是C++,所以如果您提供了任何示例,它會很好,如果它在C++中。
謝謝!
實際上通常稱爲隨機數序列的是「僞隨機」數字序列,因爲這些值是使用確定性算法計算的,並且概率不起作用。
「種子」是序列的起點,保證是如果你從相同的種子開始,你將得到相同的數字序列。這對於例如調試非常有用(當您在程序中尋找錯誤時,您需要能夠重現問題並進行研究,非確定性程序將更難以調試,因爲每次運行都會有所不同) 。
如果你需要的數字只是一個隨機序列,並不需要複製它,然後簡單地使用當前時間作爲種子...例如:
srand(time(NULL));
那麼,讓我們這麼說吧:
如果你和你的朋友設置種子等於相同的數字,那麼你和你的朋友將得到相同的隨機數。所以,如果我們所有的人寫這個簡單的程序:
#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(時間())
嗯,是的,'srand'種子'蘭特()'。但TR1中的豐富的新隨機數發生器(好吧,不是那麼新的)和C++ 11都有自己的播種機制,並且不涉及「srand」。 – 2013-02-16 21:43:44
@PeteBecker:我的猜測是,對於OP所需要的'srand/rand'綽綽有餘。 – 6502 2013-02-17 00:31:49
是的,可能。儘管如此,播種不僅僅是「srand」。 '' –
2013-02-17 13:00:21