1. 程式人生 > >C語言中的隨機數 srand ( ) 和 rand ( )

C語言中的隨機數 srand ( ) 和 rand ( )

在C語言中,生成一個隨機數,一般利用兩個函式,即void srand ( unsigned int seed ) 和 int rand ( void )。

    srand() 函式用於生成一個隨機數種子,種子的值等於引數seed,這個引數由我們指定一個數、式子或者函式值。而 rand() 函式根據這個隨機數種子進行運算生成一個[ 0 , RAND_MAX (int或 unsigned int最大值) ]範圍內的隨機數。

    在一個程式中只需執行一次srand函式即可,若引數seed是一個固定值,則同一程式中多次呼叫rand函式生成的數是隨機數,但多次呼叫這一程式時,由於初始的隨機數種子相同,所以生成的隨機數列完全相同,因此一般使用系統時間函式time(NULL)(在time.h檔案中,返回從1970年1月1日0點到現在的秒數的值)作為引數seed,使每次呼叫程式時的種子或者隨機數列也具有一定的隨機性。

    例如給int x 賦值為 [ 0 , 100 ) 的隨機整數,先呼叫 srand(time(NULL)),再利用表示式x = rand()%100 即可。

    如果在一個程式在中,迴圈呼叫 srand(time(NULL)) 和 rand() 函式,由於現在計算機執行快速,兩次迴圈的時間差不到1秒,使每次的隨機數種子相同,從而生成的隨機數也相同。即使在迴圈中加延時函式,由於時差不大,生成的隨機數也相差不大,而且使程式執行時間大大增加。因此,一定要在迴圈外使用srand函式,一個程式中使用一次即可。

    如果對隨機性要求較高,要避免採用取模操作%,這是為了避免在某些情況下,某些偽隨機數生成器產生的數,低位不夠隨機的問題,此時應採用 x = (int) (100.0 * rand() / (RAND_MAX + 1.0)) ,生成一個 [ 0 , 100 ) 的隨機浮點數,再將其轉換為 int 型,從而得到一個 0 ~ 99 的隨機整數。
--------------------- 
作者:日照萬方 
來源:CSDN 
原文:https://blog.csdn.net/XSunrise/article/details/44874583 
版權宣告:本文為博主原創文章,轉載請附上博文連結!