1. 程式人生 > >c++/c 產生隨機數(平均分佈)

c++/c 產生隨機數(平均分佈)

計算機的隨機數都是由偽隨機數,即是由小M多項式序列生成的,其中產生每個小序列都有一個初始值,即隨機種子。(注意: 小M多項式序列的週期是65535,即每次利用一個隨機種子生成的隨機數的週期是65535,當你取得65535個隨機數後它們又重複出現了。)

c++/c的隨機函式 rand() 與srand()

rand()和srand(),所在的標頭檔案是stdlib.h

srand(unsigned int seed)用來初始化隨機數發生器,設定rand()產生隨機數時的隨機數種子,rand()函式用來做隨機數發生器,返回在[0,RAND_MAX )間的均勻分佈的隨機數,其中RAND_MAX是系統設定值。

若seed值相同,則rand()每次產生的偽隨機數序列就相同。使用者未設定隨機數種子時,系統預設的隨機數種子為1。因此一般使用系統時間作為隨機數種子,則每一次執行程式所得到的序列都不相同。

//產生(a,b)之間的均勻分佈的的double型隨機數
 
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;

int main()
{
srand( (unsigned)time(0) ); //generate the seed for random number;
//time(0) or time(NULL) return the current system time in seconds,
//so if you run the code twice within one second, it will generate the same
//random number lists!!!
double rnd;

double a=0, b=10;

rnd = (double) rand()/RAND_MAX * (b-a) + a;

cout<<rnd<<endl;

srand((int)time(0));
rnd = (double) rand()/RAND_MAX * (b-a) + a;

cout<<rnd<<endl; //The same number as above

return 0;
}  
關於c/c++產生正態分佈的隨機數,可以利用產生的均勻分佈隨機數得到。