在迴圈中產生多個隨機數,容易出現連續相同的資料,最終的多個隨機數並不隨機,而是帶有某種規律性。
這種結果的原因在於,random()函式的預設種子是時間,但在迴圈中產生隨機數時,由於運算速度太快,用做種子的時間是相同的(毫秒級),因此產生的隨機數序列是相同的,這樣最終的隨機數就會相同。(基於「線性同餘法」的隨機數發生器)
解決方法是,產生乙個全域性唯一識別符號,使用它的雜湊值來做種子產生隨機數。**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.security.cryptography;
namespace calculation
//產生制定範圍內的隨機整數
public static int produceintrandom(int minvalue, int maxvalue)
} }
這樣在迴圈中產生隨機數就能基本保證其隨機性了,使用該靜態類的**如下:
//使用上述靜態類
private void button1_click_1(object sender, eventargs e) }
//使用預設時間種子
private void button2_click_1(object sender, eventargs e)
}
上述**中的第乙個迴圈可以產生100個很好的位於0-100的隨機數,而第二個迴圈,由於使用預設的時間種子,在這個迴圈中,產生的隨機數序列明顯具有相關性,可以將兩個迴圈產生的隨機數序列放在excel中,做成散點圖,結果一目了然。
第乙個迴圈的結果:
37 66
70 82
82 58
85 60
78 13
3 9
75 83
63 43
50 11
56 13
79 58
30 7
84 5
92 48
83 3
5 29
36 29
8 82
20 1
46 49
17 87
95 35
62 20
51 97
18 41
26 28
63 90
59 76
23 94
11 63
12 37
2 54
23 24
66 86
23 65
3 86
25 85
22 43
17 53
86 89
51 14
59 46
66 54
2 58
75 2
88 99
87 9
31 96
92 8
89 23
第二個迴圈的結果:
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
43 43
VC中產生隨機數
需要的標頭檔案 stdlib.h 庫函式 srand rand time 方法 1.首先設定種子srand unsigned time null 使用當前時間作為種子是多數人的習慣做法 2.產生隨機數 rand 可以產生乙個隨機數 範圍在0 rand max 32767 之間 如果要產生乙個 min...
C語言中產生隨機數
c語言 c 怎樣產生隨機數 這裡要用到的是rand 函式,srand 函式,c語言 c 裡沒有自帶的random int number 函式。1 如果你只要產生隨機數而不需要設定範圍的話,你只要用rand 就可以了 rand 會返回一隨機數值,範圍在0至rand max 間。rand max定義在s...
C 中產生隨機數 rand,srand用法
我們知道rand 函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是乙個偽隨機數,是根據乙個數 我們可以稱它為種子 為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了...