c語言要獲得隨機數,就要用到rand()函式。關於rand函式要注意以下幾點:
1.要包含stdlib.h,rand函式宣告在這個函式裡。
2.rand()函式返回乙個0~rand_max之間的隨機數,經測試在vc,gcc中,[0,rand_max],這個隨機數是可以是0或rand_max的。
3.rand()產生的是偽隨機數,如果不初始化,每次輸出都是一樣的序列。
4.srand(seed)是初始化函式,seed一般用機器時間。
rand_max是跟實現有關的,在vc6裡是
32767,在gcc裡是
2147483647。當然rand實現也不一樣。
呼叫一億次rand函式,vc6耗時約530ms,gcc耗時約1640ms.
當我們需要乙個特定區間內的隨機整數時,很多書上介紹的方法是:
x = rand()%(b-a+1) +a
這樣確實能取得[a,b]區間內的整數,但每個數的概率不一定是一樣的。
假設rand_max是8,rand返回0~8之間隨機數,如果取0~5之間的隨機數,rand返回0~8,0~5取餘後還是0~5,
6~8取餘後,產生0~2,所以0、1、2的概率就要比3、4、5高兩倍。 0
1234
5678
0123
4501
2 我的做法是:
int getrand(int max)
這個函式會產生[0,max)的隨機數,0~max-1出現的概率是均等的。
[a,b]區間的隨機數就是 a+getrand(b-a+1);
由於現在pc的浮點演算法很快,這個演算法比取餘慢不了多少。
C語言 關於rand 函式的使用
一 關於rand 首先我們須了解 rand 函式包含在中。rand 函式定義 int rand void rand 函式產生的隨機數範圍為0 0x7fff,即0 32767。事實上根據編譯器的不同範圍也會不同,但都為0 rand max 了解以上之後,我們試著產生10個偽隨機數。include in...
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函式
一 rand 函式名 rand 功 能 隨機數發生器 用 法 int rand void 所在標頭檔案 stdlib.h 函式說明 rand 的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定 的範圍裡可看成是隨機的。rand 返回一隨機數值的範圍在0至rand max 間。r...