2015-09-20 65 views
0

我想了解爲什麼我的代碼不能按我期望的那樣工作。我的意思是我想生成一個0到1之間的雙數,並且我知道當我使用 (double)rand()/ RAND_MAX時,它運行良好。不過,我讀了srand(time(NULL)) 每次編譯時都會更改每個生成的隨機數。但是,當我將它們一起使用時,程序始終會生成相同的隨機數。爲什麼會發生?謝謝。隨機數發生器與srand函數混淆

這裏是我的代碼:

//srand(time(NULL)); 
number = (double)rand()/(double)RAND_MAX; 

回答

0

srand()函數初始化僞隨機數發生器。你可以想到它就像是指向rand()的一個數字來開始它的「計算」。每次編譯和運行程序時,srand()函數都會爲函數提供time(NULL)的種子(順便提一下,它是一個每秒變化很大的數字)。如果您不使用srand(),您的rand()將始終返回相同的數字序列,因爲默認情況下會給出一個標準的非變化種子(用於啓動「計算」的數字)。你可以嘗試給你的srand()一個靜態參數,如:srand(1500)你會看到它會返回不同的數字,但是它們的順序在你每次編譯和運行時會再次相同。

欲瞭解更多信息在這裏閱讀:

http://www.cplusplus.com/reference/cstdlib/srand/

http://www.cplusplus.com/reference/cstdlib/rand/