c 迴圈中產生偽隨機數

2021-09-30 10:05:53 字數 2318 閱讀 1177

在迴圈中產生多個隨機數,容易出現連續相同的資料,最終的多個隨機數並不隨機,而是帶有某種規律性。

這種結果的原因在於,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 函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是乙個偽隨機數,是根據乙個數 我們可以稱它為種子 為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了...