c++/c 產生隨機數(平均分佈)
阿新 • • 發佈:2019-01-06
計算機的隨機數都是由偽隨機數,即是由小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++產生正態分佈的隨機數,可以利用產生的均勻分佈隨機數得到。