1. 程式人生 > 其它 >C++中的隨機數

C++中的隨機數

rand()函式

  rand()函式是從C語言繼承過來的隨機數函式,存在於標準庫<cstdlib>中。它會向我們返回一個0~RAND_MAX(32767)的整數,不需要引數。

  簡單測試一下:

 

int main( ){
    for(int i=0;i<5;i++){
        cout<<rand()<<endl;
    }
}
/**
輸出結果為:
41
18467
6334
26500
19169
**/

  好像確實輸出了一串隨機數,但事實上,無論何時何地去執行這段程式碼,得到的結果總是一樣的。

隨機數種子

  rand()函式的作用其實並不是生成隨機數,而是根據種子生成一個序列,它的邏輯是這樣的:

  規定一個函式f,令a1=f(seed),an+1=f(an)。如此下去,就得到了一個數字序列,在程式裡每呼叫一次rand()函式,就返回這個序列中的下一個數。

只要函式f的計算方式足夠複雜(事實上rand()函式的計算原理確實比較複雜),那麼表現出來就是隨機的。由於這個數列的首項是對種子seed的運算結果,所以只要種子相同,得到的數列也是一樣的,這也能解釋為什麼每次呼叫rand()得到的第一個隨機數都是41,因為種子預設為1。