rand函式

rand函式

rand函式不是真正的隨機數生成器,而srand()會設定供rand()使用的隨機數種子。如果你在第一次調用rand()之前沒有調用srand(),那么系統會為你自動調用srand()。而使用同種子相同的數調用 rand()會導致相同的隨機數序列被生成。

基本信息

C語言

rand函式 rand函式

srand((unsigned)time(NULL))則使用系統定時/計數器的值作為隨機種子。每個種子對應一組根據算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,相應的,若將srand(unsigned)time(NULL)改為srand(TP)(TP為任一常量),則無論何時運行、運行多少次得到的“隨機數”都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

庫函式中系統提供了兩個函式用於產生隨機數:srand()和rand()。 原型為:

函式一:int rand(void);

返回一個[0,RAND_MAX]間的隨機整數。

函式二:void srand(unsigned seed);

參數seed是srand()的種子,用來初始化srand()的起始值。

但是,要注意的是所謂的“偽隨機數”指的並不是假的隨機數。其實絕對的隨機數只是一種理想狀態的隨機數,計算機只能生成相對的隨機數即偽隨機數。計算機生 成的偽隨機數既是隨機的又是有規律的 —— 一部份遵守一定的規律,一部份則不遵守任何規律。比如“世上沒有兩片形狀完全相同的樹葉”,這體現到了事物的特性 —— 差異性;但是每種樹的葉子都有近似的形狀,這正是事物的共性 —— 規律性。從這個角度講,我們就可以接受這樣的事實了:計算機只能產生偽隨機數而不是絕對的隨機數。

系統在調用rand()之前都會自動調用srand(),如果用戶在rand()之前曾調用過srand()給參數seed指定了一個值,那么 rand()就會將seed的值作為產生偽隨機數的初始值;而如果用戶在rand()前沒有調用過srand(),那么系統默認將1作為偽隨機數的初始 值。如果給了一個定值,那么每次rand()產生的隨機數序列都是一樣的~~

所以為了避免上述情況的發生我們通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))來 產生種子。如果仍然覺得時間間隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)後面乘上某個合適的整數。 例如,srand((unsigned)time(NULL)*10)

另外,關於time_t time(0):time_t被定義為長整型,它返回從1970年1月1日零時零分零秒到目前為止所經過的時間,單位為秒。

srand()、rand()用法舉例:

Excel

基本用法 2003 版以上的Excel中,直接在單元格輸入=RAND()

得到大於等於0,小於1的隨機數

其他變形生成方法:

①生成A與B之間的隨機數字(A 隨機數<B)

在第一個格子中輸入:=RAND()*(B-A)+A

如,生成1到10之間的隨機數字,輸入:=RAND()*9+1

其餘數字,將滑鼠置於該格子右下角,變為十字時,向下拖拉即可。

②生成A與B之間的隨機整數(A 隨機數<B)

在第一個格子中輸入:=INT(RAND()*(B-A)+A)

如,生成1到10之間的隨機整數,輸入:=INT(RAND()*9+1)

其餘數字,將滑鼠置於該格子右下角,變為十字時,向下拖拉即可。

生成 A B 之間的隨機數字 A ≤隨機數≤ B

在第一個格子中輸入:=RAND()*(B-A+1)+A

如,生成1到100的隨機數字,輸入:=RAND()*100+1

但這個公式會出現大於B的數字,例如生成-12到12的隨機數,例如公式=RAND()%(12+12+1)-12,當RAND生成為0.99的數值時,就會產生12.75的數字。

其餘數字,將滑鼠置於該格子右下角,變為十字時,向下拖拉即可。

生成 A B 之間的 隨機整數( A ≤隨機數≤ B

在第一個格子中輸入:=INT(RAND()*(B-A+1)+A)

如,生成1到100的隨機整數,輸入:= INT(RAND()*100)+1

其餘數字,將滑鼠置於該格子右下角,變為十字時,向下拖拉即可。

⑤若是 2007 2010 版, 生成 A B 之間的 隨機整數( A ≤隨機數≤ B

在第一個格子中輸入:=RANDBETWEEN(A,B)即可。

如,生成1到10之間的隨機整數,輸入:=RANDBETWEEN(1,10)

如想得到隨機小數,則輸入:=RANDBETWEEN(1,100)/10

PHP

定義和用法

rand() 函式返回隨機整數。

語法

參數 描述
min 最小值(包括)。可選。規定隨機數產生的範圍。
max 最大值(包括)。可選。規定隨機數產生的範圍。

說明

如果沒有提供可選參數 min 和 max,rand() 返回 0 到 RAND_MAX 之間的偽隨機整數。例如,想要 5 到 15(包括 5 和 15)之間的隨機數,用 rand(5, 15)。

提示和注釋

注釋:在某些平台下(例如 Windows)RAND_MAX 只有 32768。如果需要的範圍大於 32768,那么指定 min 和 max 參數就可以生成大於 RAND_MAX 的數了,或者考慮用 mt_rand() 來替代它。

例子

輸入:

輸出:

相關詞條

相關搜尋

熱門詞條

聯絡我們