C++隨機數(shù)

C++ 隨機數(shù)

在許多情況下,需要生成隨機數(shù)。關于隨機數(shù)生成器,有兩個相關的函數(shù)。一個是 rand(),該函數(shù)只返回一個偽隨機數(shù)。生成隨機數(shù)之前必須先調(diào)用 srand() 函數(shù)。

原型:void srand(unsigned seed);

用法:它需要提供一個種子,這個種子會對應一個隨機數(shù),如果使用相同的種子后面的rand()函數(shù)會出現(xiàn)一樣的隨機數(shù)。

1?? 如: srand(1); 直接使用1來初始化種子。不過為了防止隨機數(shù)每次重復,常常使用系統(tǒng)時間來初始化,即使用 time函數(shù)來獲得系統(tǒng)時間,它的返回值為從 00:00:00 GMT, January 1, 1970 到現(xiàn)在所持續(xù)的秒數(shù),然后將time_t型數(shù)據(jù)轉化為(unsigned)型再傳給srand函數(shù)

即: srand((unsigned) time(&t));

?2? ?還有一個經(jīng)常用法,不需要定義time_t型t變量,即: srand((unsigned) time(NULL)); 直接傳入一個空指針,因為你的程序中往往并不需要經(jīng)過參數(shù)獲得的t數(shù)據(jù)。

下面是一個關于生成隨機數(shù)的簡單實例。實例中使用了 time() 函數(shù)來獲取系統(tǒng)時間的秒數(shù),通過調(diào)用 rand() 函數(shù)來生成隨機數(shù),srand函數(shù)是隨機數(shù)發(fā)生器的初始化函數(shù)。

運行程序
運行結果

小貼士:計算機并不能產(chǎn)生真正的隨機數(shù),而是已經(jīng)編寫好的一些無規(guī)則排列的數(shù)字存儲在電腦里,把這些數(shù)字劃分為若干相等的N份,并為每份加上一個編號用srand()函數(shù)獲取這個編號,然后rand()就按順序獲取這些數(shù)字,當srand()的參數(shù)值固定的時候,rand()獲得的數(shù)也是固定的,所以一般srand的參數(shù)用time(NULL),因為系統(tǒng)的時間一直在變,所以rand()獲得的數(shù),也就一直在變,相當于是隨機數(shù)了。

只要用戶或第三方不設置隨機種子,那么在默認情況下隨機種子來自系統(tǒng)時鐘。如果想在一個程序中生成隨機數(shù)序列,需要至多在生成隨機數(shù)之前設置一次隨機種子。 即:只需在主程序開始處調(diào)用srand((unsigned)time(NULL));

注意:不要在for等循環(huán)放置srand((unsigned)time(NULL));

srand((unsigned)time(NULL))詳解

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容