c++中常用rand()函式生成隨機數,但嚴格意義上來講生成的只是偽隨機數(pseudo-random integral number)。生成隨機數時需要我們指定乙個種子,如果在程式內迴圈,那麼下一次生成隨機數時呼叫上一次的結果作為種子。但如果分兩次執行程式,那麼由於種子相同,生成的「隨機數」也是相同的。
在工程應用時,我們一般將系統當前時間(unix時間)作為種子,這樣生成的隨機數更接近於實際意義上的隨機數。給一下例程如下:
#include
#include
#include
using namespace std;
int main()
double random(double start, double end)
/* 執行結果
* no.1: 3
* no.2: 9
* no.3: 0
* no.4: 9
* no.5: 5
* no.6: 6
* no.7: 9
* no.8: 2
* no.9: 9
* no.10: 6
*/利用這種方法能不能得到完全意義上的隨機數呢?似乎9有點多哦?卻沒有1,4,7?!我們來做乙個概率實驗,生成1000萬個隨機數,看0-9這10個數出現的頻率是不是大致相同的。程式如下:
#include
#include
#include
#include
using namespace std;
int main()
;const int gen_max = 10000000;
srand(unsigned(time(0)));
for(int icnt = 0; icnt != gen_max; ++icnt)
switch(int(random(0,10)))
for(int icnt = 0; icnt != 10; ++icnt)
cout << icnt << ": " << setw(6) << setiosflags(ios::fixed) << setprecision(2) << double(a[icnt])/gen_max*100 << "%" << endl;
return 0;
}double random(double start, double end)
/* 執行結果
* 0: 10.01%
* 1: 9.99%
* 2: 9.99%
* 3: 9.99%
* 4: 9.98%
* 5: 10.01%
* 6: 10.02%
* 7: 10.01%
* 8: 10.01%
* 9: 9.99%
*/可知用這種方法得到的隨機數是滿足統計規律的。
c 隨機數產生
我們在做能自動生成試卷的考試系統時,常常需要隨機生成一組不重複的題目,在.net framework中提供了乙個專門用來產生隨機數的類system.random。對於隨機數,大家都知道,計算機不可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的演算法對事先選定的隨機種子做複雜的運算,用產生的結...
C 隨機數產生
標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...
C 產生隨機數
c 怎樣產生隨機數 這裡要用到的是 rand 函式 srand 函式 c 裡沒有自帶的random int number 函式。1 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand 就可以了 rand 會返回一隨機數值,範圍在0至rand max 間。rand max值至少為32767。例...