隨機數在統計理論中占有很重要的地位,很多應用都需要用到他,系統自帶的rand()函式產生的是偽隨機數,所以該如何真正的隨機數呢?
1、c語言中的時間函式
關於c語言我查到的兩個比較好的博文是:
裡面寫的很是詳細,但是我想通過乙個例子來說明感覺比較好。常用的也就這幾個。
char a[100]; time_t now;
time(&now); //
或者 now = time(null);
printf("
%s",ctime(&now));//
time();這個函式其實儲存的是乙個歷史時間,所以需要用null把這個歷史時間清空一下,time()就會自動儲存當前時間了。你可以簡單的理解為null就是給time()初始化。然後利用ctime()函式輸出固定格式的時間字串。
2、隨機數
c語言自帶是隨機數是能夠產生隨機數,但是你每次呼叫後產生的隨機數都是一樣的一套隨機數。這樣就不行了。就像這樣:
int i;for(i = 0;i<5;i++)
你只要使用上面這個程式,就會得到下面這樣的隨機數:41,18467,6334,26500,19169,沒有例外。為了解決這個問題,時間函式就來了,時間能揭開一切虛假的東西。
只要在程式的開頭加上srand(time(null));
srand函式是隨機數發生器的初始化函式。這句話就是把當前時間當成隨機數種子。
這樣,隨機數的種子就被賦值成當前time函式執行的時候的系統時間了,保證了隨機性。
還有乙個經典的例子:
1//產生100個0-1之間的隨機數
2srand(time(null));//產生時間種子
3int
i,rand_int ;
4float
rand_float;
5for(i = 0;i<100;i++)
6
由隨機數rand5實現隨機數rand7
rand7表示生成隨機數1,2,3,4,5,6,7 要通過rand5構造rand7現在可能沒有什麼思路,我們先試著用rand7生成rand5 rand7生成rand5很簡單,把6和7排除掉就是rand5了,也就是當隨機到大於5的時候,就再隨機一次,直到小於等於5 寫起來很容易 public stat...
rand生成偽隨機數
void srand unsigned seed 設定隨機數種子。int rand void 根據設定的種子計算生成一組整型偽隨機數序列。若沒有手動設定seed,這個函式會自動設定seed為1,即手動呼叫srand 1 與不呼叫srand產生的效果一樣。每次呼叫rand時,會依次將隨機數從隨機數序列...
PHP生成隨機數 rand
php 4,php 5 rand 產生乙個隨機整數 intrand void intrand int min,int max 如果沒有提供可選引數min和max,rand 返回 0 到 getrandmax 之間的偽隨機整數。例如想要 5 到 15 包括 5 和 15 之間的隨機數,用 rand 5...