淺析C語言中的偽隨機數(shù)

哈嘍,大家好,我是北方素素~

首先給大家解釋一下這個標題,什么叫做“淺析”呢?就是稍微分析一下,哈哈。用了“淺析”就突然感覺高大上了,其實并沒有多深奧,只是以我的理解給大家解釋一下。

我們知道,在一些書籍中,使用C語言生成隨機數(shù)一般是這樣寫的:

srand(unsigned(time(NULL)));

int rand_number = rand();

這里主要涉及到了三個函數(shù),srand(),rand()和time()。

不知道這三個函數(shù)是做什么的?MSDN文檔中解釋了這三個函數(shù)的作用:

srand():Sets the starting seed value for the pseudorandom number generator(設(shè)置偽隨機數(shù)生成器的起始種子值)。

它的搭檔rand():Generates a pseudorandom number(生成一個偽隨機數(shù))。

而time()的解釋就更簡單了:Get the system time(獲得系統(tǒng)時間)。

這三個函數(shù)組合在一起,就可以生成隨機數(shù)。

細心的同學(xué)可能會發(fā)現(xiàn)這里有一個特殊的詞-偽隨機數(shù)。那么什么是偽隨機數(shù)呢?

關(guān)于偽隨機數(shù)的概念我就不多說了,大家自行搜索一下就有很多解釋,在這里我只說一下自己的理解:

先說一下真隨機,真隨機也就是我們?nèi)粘Uf的隨機,一個隨機事件的結(jié)果是不確定的,比如拋硬幣,在正常情況下,拋硬幣的結(jié)果是不確定的,換句話說,結(jié)果是不可預(yù)測的。

然后說說偽隨機,偽隨機是計算機生成隨機數(shù)的一種方式,計算機不能真正模仿隨機事件,而只能通過計算來生成隨機數(shù)。換句話說,如果我們知道了計算機計算隨機數(shù)的算法,我們是可以預(yù)測偽隨機數(shù)的。

當然我們得用例子說話。

從上面的討論我們可以知道,因為rand()產(chǎn)生的數(shù)字是偽隨機數(shù),所以它一定有一個固定的算法來生成偽隨機數(shù),那么算法是固定的,不固定的只有srand()所設(shè)置的種子了。

確定了這一點之后,我們就可以做實驗驗證我們的猜想了。

如果srand()設(shè)定的種子是一個固定值會發(fā)生什么?

srand(1);

int rand_number = rand();

在我執(zhí)行了N次之后,結(jié)果都是固定的。(大家可以親自試一試)

這就說明我們的“隨機數(shù)”就是通過某種算法計算出來的結(jié)果,所以要想這個結(jié)果發(fā)生變化,就需要設(shè)定一個不斷變化的“種子”。

那么這里也就解釋了“種子”的作用-用來給隨機數(shù)生成器提供一個輸入,之后隨機數(shù)生成器就會使用這個“種子”生成不同的偽隨機數(shù)。

舉個栗子~

如果我們的隨機數(shù)生成算法是這樣的:

rand=1+x;

那么我們的“種子”就是上式中的x,,每當我們輸入不同的x,產(chǎn)生的結(jié)果rand也就會不同。

至于為什么選擇time()作為“種子”嘛,上面說了,這個函數(shù)呢,用來獲取系統(tǒng)時間,因為系統(tǒng)時間是一直在變化的,就相當于我們隨機數(shù)的“種子”是在一直變化的,所以每次調(diào)用time()函數(shù),都會獲得不同的值,這樣我們的rand()每次生成的結(jié)果也就不一樣啦~

最后總結(jié)一下這三個函數(shù)在生成偽隨機數(shù)的時候是怎么配合的。

首先,time()獲取了系統(tǒng)時間;然后,srand()把獲取到的系統(tǒng)時間設(shè)置為rand()的“種子”;最后,由rand()通過計算,把“種子”轉(zhuǎn)換為一個數(shù)字。

好啦,這篇文章就寫到這里了~

歡迎大家訪問我的網(wǎng)站:https://bfss.github.io/,如果覺得我的文章幫到了您,可以在網(wǎng)站上點擊“支持我”對我進行鼓勵喲~(手機端網(wǎng)頁在左上角,電腦端網(wǎng)頁在右上角)

作者:北方素素

https://www.bilibili.com/read/cv311534

出處: bilibili

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

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

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