獲取隨機數函式sand 的總結

2021-06-12 22:42:09 字數 2097 閱讀 7377

獲取隨機數函式sand()的用法詳見官方文獻:

1、函式 int sand(void);的返回值為0——rand_max(官方文獻裡此值為32767)之間的隨機數。

2、介紹sand()函式不可避免要介紹void srand(unsigned int seed);函式,此函式的作用有兩個:一、縮小sand()函式的返回值區間大小,執行過srand(unsigned int seed)函式後,sand函式的返回值為[seed,32767)之間的隨機數;二、可以理解為金鑰值,讓每次的sand()執行結果都不同,此時要求seed值必須是變值(金鑰值變化結果才能變化嘛)。sand()函式執行之間不執行srand函式與執行srand(1)的結果是相同的。

3、sand()的一些技巧:

(1)若再想縮小返回值的區間大小就要利用一些方法了,比如若想獲取[0,34)之間的隨機數,我們可以用求餘方法處理:sand() % 34。推廣公式就是: rand() %(m-n)  + n,返回區間為[n,m)。

(2)前邊我們提到過如何讓每次的執行結果都不同,我們須把seed的值變化,我們首先想到的肯定是以當前的時間為seed值。

下面是寫的乙個小例子及執行結果:

例子1:不呼叫srand(unsigned int seed);時:

#include#include#includeint main()

result = rand()%16 + 1;

printf("%02d\n",result);

printf("over!\n");

return 0;

}

編譯及執行結果:

$ gcc -o test_rand my_rand.c

$ test_rand

the result is:

09 17 16 26 32 18 03

over!

$ test_rand

the result is:

09 17 16 26 32 18 03

over!

例子2:呼叫srand(1)時:

#include#include#includeint main()

result = rand()%16 + 1;

printf("%02d\n",result);

printf("over!\n");

return 0;

}

編譯及執行結果:

$ gcc -o test_rand my_rand.c

$ test_rand

the result is:

09 17 16 26 32 18 03

over!

$ test_rand

the result is:

09 17 16 26 32 18 03

over!

例子3:呼叫srand(seed),並且seed值一直變化的情況:

#include#include#includeint main()

result = rand()%16 + 1;

printf("%02d\n",result);

printf("over!\n");

return 0;

}

編譯及執行結果:

$ my_rand

the result is:

17 31 14 22 29 12 10

over!

$ my_rand

the result is:

19 24 22 29 25 21 16

over!

(不知道大家注意到rand函式返回值的區間的細節沒呢?

生成隨機數的 sand 與 srand

需要使用 include 標頭檔案中的rand 函式來生成隨機數。這個函式返回乙個在 0 rand max 之間的隨機整數。rand max 是乙個平台決定的常數。例如,在 visual c 中,rand max 是32767.rand 函式生成的是偽隨機數。即每次在同乙個系統上執行這個函式的時候,...

獲取隨機數

c 中提供了隨機數函式rand 但是這個函式其實提供的數字是有限的,大概是0 32767,所以這就導致了兩個問題 1 獲取的的數字並不是隨機的,比如要取0 99的隨機數,那麼一般就是rand 100,由於32767 100 67,所以0 67的數字獲得到的次數會比68 99多一次。2 無法獲取到比3...

隨機數總結

在計算機中並沒有乙個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好像是真正的隨機數,實現這一功能的程式叫隨機數發生器。無論採用什麼數學演算法產生隨機數發生器,都必須給它提供乙個名為 種子 的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。種子 的值通常是用快速暫存器或...