今天來更新一下關於隨機數生成器的應用。
那麼廢話不多說,首先給出最簡單的rand()用法:
有意思的是,time(1)與time(0)似乎並沒有什麼區別,關於這兩個的討論可以參見:// srand所在的標頭檔案
#include// time引數所在標頭檔案
#include ...
// 生成 [0,1) 的隨機數(double)
double rng()
int main(void)
另外,在網上可以隨隨便便搜尋到很多關於rand()表示式的用法舉例,在此隨意貼出一二:
要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a;
要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a;
要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整數的範圍。
要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (rand_max + 1)。
要取得0~1之間的浮點數,可以使用rand() / double(rand_max)。
好,那麼現在問題來了:這東西能用來幹嘛呢?
um...我不知道各位讀者能用來幹嘛,反正我們的作業要用來生成二項分布...
考慮乙個簡單的二項分布:發生事件的概率p為0.2,重複5次試驗,且用上述提到的rand()函式來生成。
二項分布嘛,結果不是true就是false,非1即0嘛。所以,可以考慮生成[0,1)區間內的隨機數,然後令隨機數小於等於0.2的輸出值為1,否則輸出0.
那麼這樣一來就很簡單了。在此基礎上,如果要進行n組這樣的實驗(每組實驗重複5次,每次實驗為1的概率為0.2),然後將結果與實際的二項分布結果對比,以此衡量我們用隨機數生成器所構造的二項分布是否確實「有效地」模擬了二項分布。
那麼廢話不多說,show you my code:
從結果上來看,當n越大,則隨機數生成器模擬的二項分布將會無限接近實際的二項分布。#include#include#include// 隨機數生成器
double rng()
int main(void)
*/// n = 5, p = 0.2
n = 5;
p = 0.2;
// n=10,100,1000
for(n = 1; n <= 2; n++)
}//fclose(fpwrite);
}
隨機數生成器
標頭檔案 內容 rand,srand函式和rand max常量 rand max 在windows系統中為32767 在類unix系統中為2147483647 rand 函式返回乙個0 rand max的隨機整數 srand seed 函式 接受unsigned int 型別的引數seed,以see...
MATLAB隨機數生成器
1 rand 生成 0,1 區間上均勻分布的隨機數 基本語法 rand m,n,p 生成排列成m n p 多維向量的隨機數。如果只寫m,則生成m m矩陣 如果引數為 m,n 可以省略方括號。2 randn 生成服從標準正太分布 均值為0,方差為1 的隨機數 基本語法 randn m,n,p,解釋同1...
隨機數生成器,隨機種子
遊戲中經常要用到隨機數,但如果乙個沒有隨機種子的的生成器,就沒法重複之前的隨機數了。js的math.random就用不了隨機種子,只好自己弄了乙個,有了隨機種子,每次只要傳入相同的種子,都會得到同樣的隨機數。直接 function seededrandom seed,min,max 這是一種偽隨機數...