小議 C C 隨機數生成器

2021-08-23 15:32:41 字數 916 閱讀 1942

一般設定隨機數產生使用

srand((unsigned)time( null ));

因為以上是根據時間來設定的,所以隨機數是不可預見的!

其實這是個偽隨機數,並且計算機只能產生偽隨機數(既是隨機的又是有規律的),這句**的隨機數是怎麼產生的呢? 先說說它的工作原理:

....

(1).首先給srand()提供乙個種子,它是乙個unsigned 型別,其取值範圍從0~65535

(2). 然後呼叫rand(),它會根據提供給srand()的種子值返回乙個隨機數(在0到32767之間) # 這步是核心,隨機種子是用來產生隨機數的乙個數

(3).根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;

....

通過這三步可以了解到,隨機數是由隨機種子根據一定的計算演算法計算出來的數值, 所以如果計算方法一定,隨機種子一定,那麼產生的隨機數就不會變.

比如:在同樣的計算機和編譯平台下 ,編譯並執行如下程式:

unsigned int seed = 1; srand(seed); unsigned value = rand();

產生的隨機數永遠都是一樣的. 了解了基本原理,程式就好設計了.

隨機數生成例子:

#include #include #include int main(void)

生成0~1之間的數字

#include #include #include int main(void)

欲生成什麼到什麼的隨機數 ?

由於rand產生的隨機數從0到rand_max,而rand_max是乙個很大的數,那麼如何產生從x~y的數呢?

從x到y,有y-x+1個數,所以要產生從x到y的數,只需要這樣寫:

k=rand()%(y-x+1)+x;

隨機數生成器

標頭檔案 內容 rand,srand函式和rand max常量 rand max 在windows系統中為32767 在類unix系統中為2147483647 rand 函式返回乙個0 rand max的隨機整數 srand seed 函式 接受unsigned int 型別的引數seed,以see...

MATLAB隨機數生成器

1 rand 生成 0,1 區間上均勻分布的隨機數 基本語法 rand m,n,p 生成排列成m n p 多維向量的隨機數。如果只寫m,則生成m m矩陣 如果引數為 m,n 可以省略方括號。2 randn 生成服從標準正太分布 均值為0,方差為1 的隨機數 基本語法 randn m,n,p,解釋同1...

隨機數生成器,隨機種子

遊戲中經常要用到隨機數,但如果乙個沒有隨機種子的的生成器,就沒法重複之前的隨機數了。js的math.random就用不了隨機種子,只好自己弄了乙個,有了隨機種子,每次只要傳入相同的種子,都會得到同樣的隨機數。直接 function seededrandom seed,min,max 這是一種偽隨機數...