使用**執行結果說明隨機函式的使用
隨機數生成的原理
「計算機產生的隨機數一般都只是乙個週期很長的數列,不是真的隨機數。也就是說,隨機數一般是偽隨機數,每個隨機數都是由隨機種子開始的乙個已定的數列(週期很長)。一般地,為了隨機數更真一點,隨機種子在系統中通常是參照系統時鐘生成的。」
以上引用了別人的話。有幾個關鍵點:一是所謂的隨機數是偽隨機數,二『偽隨機數生成器返回的每乙個值完全由它返回的前乙個值所決定數(最終,該種子決定了一切)』。所以產生隨機數,首先要解決隨機數種子的問題。
若產生的隨機數不需要設定範圍的話,用rand()就可以:rand()會返回一隨機數值, 範圍在0至rand_max 間。rand_max其值為2147483647。
連續執行兩次下面的**
示例一:兩次執行產生的隨機數列相同
#include
#include
int main()
}student@student-desktop:~/c$ gcc 1.c
student@student-desktop:~/c$ ./a.out
1804289383
846930886
1681692777
1714636915
1957747793
student@student-desktop:~/c$ gcc 1.c
student@student-desktop:~/c$ ./a.out
1804289383
846930886
1681692777
1714636915
1957747793
如果未設隨機數種子, rand()在呼叫時會自動設隨機數種子為1。上面的例子就是因為沒有設定隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。
srand()用來設定rand()產生隨機數時的隨機數種子。在呼叫rand()函式產生隨機數前,必須先利用srand()設好隨機數種子(seed)。
srand()函式定義 : void srand (unsigned int seed);
通常可以利用time(0)的返回值來當做seed
如果用time(0)的話,要加入標頭檔案#include
示例二:
連續執行三次下面的**
#include
#include
int main()
}student@student-desktop:~/c$ gcc 1.c
student@student-desktop:~/c$ ./a.out
1924094034
1785506308
1524704222
1354507979
344402972
student@student-desktop:~/c$ ./a.out
404710938
1928005067
1553276364
1571725223
1786119107
student@student-desktop:~/c$ ./a.out
732550552
812691376
90442638
1407542519
941658889
示例三:如果兩次執行時間間隔大於一秒,那麼種子就會不同。
連續執行三次下面的**
#include
#include
int main()
}student@student-desktop:~/c$ gcc 1.c
student@student-desktop:~/c$ ./a.out
1179588171
1179588171
1179588171
1179588171
1179588171
student@student-desktop:~/c$ ./a.out
1355266778
1355266778
1355266778
1355266778
1355266778
student@student-desktop:~/c$ ./a.out
437518563
437518563
437518563
437518563
437518563
#include
#include
int main()
}student@student-desktop:~/c$ gcc 1.c
student@student-desktop:~/c$ ./a.out
814189286
497536887
200370014
2046930661
679349646
rand 函式使用
一般情況下,我們在生成隨機數的時候,都會用srand來獲取種子,再使用rand 函式生成隨機數。include include void main 結果確並不是跟設想的一樣產生隨機數 root localhost test a.out i 0,r 6 i 1,r 6 i 2,r 6 i 3,r 6 ...
RAND MAX的使用及rand()函式使用
rand 不需要引數,它會返回乙個從0到最大隨機數的任意整數,最大隨機數的大小通常是固定的乙個大整數,一般為0x7fff rand 範圍是 0,rand max 如果說是 10rand 則對應的範圍應該為 0.0,10rand max 一般來說,rand b a 1 a 就表示 a b 之間的乙個隨...
Matlab之rand函式的使用
rand函式的意義 rand是0 1的均勻分布,randn是均值為0方差為1的正態分佈 用法自己help rand或者help randn一下就知道了 rand n 或randn n 生成n n的隨機數矩陣 rand n,m 或randn m,n 生成m n的隨機數矩陣。y rand n y ran...