關於rand()和srand()的理解

函數一:int rand(void);
從srand (seed)中指定的seed開始,返回一個[seed, RAND_MAX(0x7fff))間的隨機整數。

函數二:void srand(unsigned seed); 
參數seed是rand()的種子,用來初始化rand()的起始值。

 

如果在rand()之前沒有調用srand (),它會自動調用srand(1)一次。

可以把隨機數列看做是一個長爲RAND_MAX的隨機數組,而srand(seed)就是取數組的下標,從這個下標開始往後去數組中的數。

因此如果給seed指定的是一個定值,那麼每次程序運行時rand()產生的值都會一樣,雖然這個值會是[seed, rand_max(0x7fff))之間的一個隨機取得的值。 

所以利用時間作爲seed,那麼每次取到的值隨機性很強的。

srand((unsigned)time(0));

 

例如網遊的服務器,每次啓動的時候都設置種子srand((unsigned)time(0)),然後所有的隨機數都無須再設置種子,相當於每次都依次往後取隨機數組中的數,只要rand()就可以取到比較滿意的隨機數了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章