C語言
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() 來替代它。
例子
輸入:
輸出: