標準庫 (被包含於 中)提供兩個幫助生成偽隨機數的函式:
函式一:int rand(void);
從srand (seed)中指定的seed開始,返回乙個[seed, rand_max(0x7fff))間的隨機整數。
函式二:void srand(unsigned seed);
引數seed是rand()的種子,用來初始化rand()的起始值。
可以認為rand()在每次被呼叫的時候,它會檢視:
1) 如果使用者在此之前呼叫過srand(seed),給seed指定了乙個值,那麼它會自動呼叫
srand(seed)一次來初始化它的起始值。
2) 如果使用者在此之前沒有呼叫過srand(seed),它會自動呼叫srand(1)一次。
根據上面的第一點我們可以得出:
1) 如果希望rand()在每次程式執行時產生的值都不一樣,必須給srand(seed)中的seed乙個變值,這個變值必須在每次程式執行時都不一樣(比如到目前為止流逝的時間)。
2) 否則,如果給seed指定的是乙個定值,那麼每次程式執行時rand()產生的值都會一樣,雖然這個值會是[seed, rand_max(0x7fff))之間的乙個隨機取得的值。
3) 如果在呼叫rand()之前沒有呼叫過srand(seed),效果將和呼叫了srand(1)再呼叫rand()一樣(1也是乙個定值)。
舉幾個例子,假設我們要取得0~6之間的隨機整數(不含6本身):
例一,不指定seed:
for(int i=0;i <10;i++)
執行結果為:0.716636,0.457725,…等10個0~1之間的浮點數,每次結果都不同。
如果想取更大範圍的隨機浮點數,比如1~10,可以將
rand() /(double)(rand_max) 改為 rand() /(double)(rand_max/10)
執行結果為:7.19362,6.45775,…等10個1~10之間的浮點數,每次結果都不同。
至於100,1000的情況,如此類推。
以上不是偽隨機浮點數最好的實現方法,不過可以將就著用用…
rand 和 srand產生隨機數
在c語言中,rand 函式可以用來產生隨機數,但是這不是真真意義上的隨機數,是 乙個偽隨機數,是根據乙個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機 數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你...
產生隨機函式srand函式和rand函式的使用
srand 初始隨機數發生器 rand 隨機數發生器 當srand 的內容相同時,則在rand 後產生相同的隨機數列 所以當用time null 來進行初始隨機數,根據時間來產生隨機數,這樣就能產生不同的。呼叫方法是srand gettickcount 但是又不能在每次呼叫rand 的時候都用sra...
C 利用srand和rand產生隨機數
他人部落格,時間久了,忘記 轉的了。以後發現再補充出處。產生一到十的十個隨機數 include include include include using namespace std define max 10 int main int main srand unsigned time null f...