新聞中心
rand()的功能:隨機(jī)數(shù)發(fā)生器,srand()的功能:初始化隨機(jī)數(shù)發(fā)生器。

創(chuàng)新互聯(lián)建站10多年成都企業(yè)網(wǎng)站定制服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站定制及推廣,對(duì)石雕等多個(gè)行業(yè)擁有豐富的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
計(jì)算機(jī)的隨機(jī)數(shù)都是由偽隨機(jī)數(shù),即是由小M多項(xiàng)式序列生成的,其中產(chǎn)生每個(gè)小序列都有一個(gè)初始值,即隨機(jī)種子。(注意: 小M多項(xiàng)式序列的周期是65535,即每次利用一個(gè)隨機(jī)種子生成的隨機(jī)數(shù)的周期是65535,當(dāng)你取得65535個(gè)隨機(jī)數(shù)后它們又重復(fù)出現(xiàn)了。)
我們知道 rand() 函數(shù)可以用來(lái)產(chǎn)生隨機(jī)數(shù),但是這不是真正意義上的隨機(jī)數(shù),是一個(gè)偽隨機(jī)數(shù),是根據(jù)一個(gè)數(shù)(我們可以稱它為種子)為基準(zhǔn)以某個(gè)遞推公式推算出來(lái)的一系列數(shù),當(dāng)這系列數(shù)很大的時(shí)候,就符合正態(tài)公布,從而相當(dāng)于產(chǎn)生了隨機(jī)數(shù),但這不是真正的隨機(jī)數(shù),當(dāng)計(jì)算機(jī)正常開機(jī)后,這個(gè)種子的值是定了的,除非你破壞了系統(tǒng)。
1.rand()
功能:
隨機(jī)數(shù)發(fā)生器
用法:
int rand(void)
所在頭文件:
stdlib.h
rand() 的內(nèi)部實(shí)現(xiàn)是用線性同余法做的,它不是真的隨機(jī)數(shù),因其周期特別長(zhǎng),故在一定的范圍里可看成是隨機(jī)的。
rand() 返回一隨機(jī)數(shù)值的范圍在 0 至 RAND_MAX 間。RAND_MAX 的范圍最少是在 32767 之間(int)。用 unsigned int 雙字節(jié)是 65535,四字節(jié)是 4294967295 的整數(shù)范圍。0~RAND_MAX 每個(gè)數(shù)字被選中的機(jī)率是相同的。
用戶未設(shè)定隨機(jī)數(shù)種子時(shí),系統(tǒng)默認(rèn)的隨機(jī)數(shù)種子為 1。
rand() 產(chǎn)生的是偽隨機(jī)數(shù)字,每次執(zhí)行時(shí)是相同的; 若要不同, 用函數(shù) srand() 初始化它。
2.srand()
功能:
初始化隨機(jī)數(shù)發(fā)生器
用法:
void srand(unsigned int seed)
所在頭文件:
stdlib.h
srand() 用來(lái)設(shè)置 rand() 產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。參數(shù) seed 必須是個(gè)整數(shù),如果每次 seed 都設(shè)相同值,rand() 所產(chǎn)生的隨機(jī)數(shù)值每次就會(huì)一樣。
3.使用當(dāng)前時(shí)鐘作為隨機(jī)數(shù)種子
rand() 產(chǎn)生的隨機(jī)數(shù)在每次運(yùn)行的時(shí)候都是與上一次相同的。若要不同, 用函數(shù) srand() 初始化它??梢岳?srand((unsigned int)(time(NULL)) 的方法,產(chǎn)生不同的隨機(jī)數(shù)種子,因?yàn)槊恳淮芜\(yùn)行程序的時(shí)間是不同的。
4.產(chǎn)生隨機(jī)數(shù)的用法
-
給srand()提供一個(gè)種子,它是一個(gè)unsigned int類型;
-
調(diào)用rand(),它會(huì)根據(jù)提供給srand()的種子值返回一個(gè)隨機(jī)數(shù)(在0到RAND_MAX之間);
-
根據(jù)需要多次調(diào)用rand(),從而不間斷地得到新的隨機(jī)數(shù);
-
無(wú)論什么時(shí)候,都可以給srand()提供一個(gè)新的種子,從而進(jìn)一步”隨機(jī)化”rand()的輸出結(jié)果。
0~RAND_MAX 之間的隨機(jī)數(shù)程序
#include
#include
#include
using namespace std;
int main()
{
srand((unsigned)time(NULL));
for(int i = 0; i '/t';
cout return 0;
}
5.產(chǎn)生一定范圍隨機(jī)數(shù)的通用表示公式
要取得 [a,b) 的隨機(jī)整數(shù),使用 (rand() % (b-a))+ a;
要取得 [a,b] 的隨機(jī)整數(shù),使用 (rand() % (b-a+1))+ a;
要取得 (a,b] 的隨機(jī)整數(shù),使用 (rand() % (b-a))+ a + 1;
通用公式: a + rand() % n;其中的 a 是起始值,n 是整數(shù)的范圍。
要取得 a 到 b 之間的隨機(jī)整數(shù),另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得 0~1 之間的浮點(diǎn)數(shù),可以使用 rand() / double(RAND_MAX)。
網(wǎng)站欄目:詳解C++rand與srand使用方法
本文URL:http://www.dlmjj.cn/article/cdijcoc.html


咨詢
建站咨詢
