srand()就是給rand()提供種子seed
如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的,
srand(n)
for(10)
rand()
也就是說,以乙個固定的數值作為種子是乙個缺點。 通常的做法是 以這樣一句**srand((unsigned) time(null))=srand((unsigned) time(0));來取代,這樣將使得種子為乙個不固定的數, 這樣產生的隨機數就不會每次執行都一樣了。
1,先看乙個例子
#include
#include
#include
using namespace std;
int main( void )
}檢視ptstring的值會顯示 「tue sep 13 16:31:06 2005」
3, 最後說說srand()函式
void srand(unsigned seed) 初始化隨機數發生器
有討論如下:
1.c的函式庫之所以沒有把使用系統時鐘初始化隨機種子這步重要的操作直接放進ran
d函式的實現中,我覺得至少有三個原因:
(1)可以高效產生連續的隨機數,不用每次都初始化;
(2)給程式設計師以更高的靈活性,因為可能在要求較高的場合,應該使用更好的的資料
做種子,而不是系統時鐘;
(3)對於只是想產生大量偽隨機數來盡興某種驗證或者統計,未必需要初始化,大不
了程式每次執行都產生同樣的一系列隨機數而已——有些情況下,這是無所謂的。
事實上有乙個更重要的原因:
作為偽隨機序列產生器的rand()函式,必須具備的乙個重要特性就是-》產生的序
列必須是可重現的。
這不僅僅是乙個演算法,相當大的程度上,它關係到**測試的準確性。如果演算法中
使用了和rand()的結果相關的資料,通過乙個可控的可重現序列,我們就有機會再現每一
次測試的過程,從而更有效的找到問題的所在。
所以這裡提出乙個建議,**中,如果rand()的函式結果關係到演算法的結果,那麼
,必須保證你的rand()呼叫是可重現的。
4,c語言裡函式rand()和srand()的用法 - -
rand(void)用於產生乙個偽隨機unsigned int 整數。
srand(seed)用於給rand()函式設定種子。
srand 和 rand 應該組和使用。一般來說,srand 是對 rand 進行設定。
比如:srand((uint)getcurrenttime());
int x = rand() % 100;
是生成 0 到 100 之間的隨機數。
srand()是用來初始化隨機種子數的,因為rand的內部實現是用線性同餘法做的,他不是真
的隨機數,只不過是因為其週期特別長,所以有一定的範圍裡可看成是隨機的,式子如下
:rand = rand*const_1 + c_var;
srand函式就是給它的第乙個rand值。
用"int x = rand() % 100;"來生成 0 到 100 之間的隨機數這種方法是不或取的,
比較好的做法是: j=(int)(n*rand()/(rand_max+1.0)) 產生乙個0到n之間的隨機
數rand_max=0x7fffffff
5.總結
1)srand()給rand()提供種子
2)srand()中的seed一般由時間函式得,eg srand((uint)getcurrenttime()) srand( (u
nsigned)time( null ) ) time()函式得到現在的系統時間…等等
srand 以及rand 函式用法
srand 就是給rand 提供種子seed 如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的,srand n for 10 rand 也就是說,以乙個固定的數值作為種子是乙個缺點。通常的做法是 以這樣一句 srand unsigned time null 來取代,這樣將使得...
srand 以及rand 函式用法(zz)
srand 就是給rand 提供種子seed 如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的,srand n for 10 rand 也就是說,以乙個固定的數值作為種子是乙個缺點。通常的做法是 以這樣一句 srand unsigned time null 來取代,這樣將使得...
srand 以及rand 函式用法(zz)
srand 以及rand 函式用法 zz srand 就是給rand 提供種子seed 如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的,srand n for 10 rand 也就是說,以乙個固定的數值作為種子是乙個缺點。通常的做法是 以這樣一句 srand unsigne...