基本隨機數生成
函式 rand()
可用於生成 0
和 RAND_MAX
之間的偽隨機整數值(包括 0
和 RAND_MAX
)。
srand(int)
用於為偽隨機數生成器播種。每次將 rand()
播種到同一種子時,它必須產生相同的值序列。它應該只在播放 rand()
之前播種一次。每次希望生成一批新的偽隨機數時,不應重複播種或重新播種。
標準做法是使用 time(NULL)
的結果作為種子。如果隨機數生成器需要具有確定性序列,則可以在每個程式啟動時為生成器設定相同的值。這通常不是釋出程式碼所必需的,但在除錯執行中非常有用,可以使錯誤重現。
建議始終為生成器播種,如果不播種,它的行為就好像是用 srand(1)
播種的。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i;
srand(time(NULL));
i = rand();
printf("Random value between [0, %d]: %d\n", RAND_MAX, i);
return 0;
}
可能的輸出:
Random value between [0, 2147483647]: 823321433
筆記:
C 標準不保證產生的隨機序列的質量。在過去,rand()
的一些實現在生成的數字的分佈和隨機性方面存在嚴重問題。不建議將 rand()
用於嚴重的隨機數生成需求,如加密。