2011-09-05 82 views

回答

11

均勻:
生成在範圍[0,1]與uniform distribution隨機數:

double X=((double)rand()/(double)RAND_MAX); 

Exponentional
生成與參數拉姆達一個exponentional random variable

-ln(U)/lambda (where U~Uniform[0,1]). 

正常:
儘管費時,最簡單的方法是使用central limit theorem [總計足夠均勻分佈的數字],但在wikipedia page中還有其他方法,如box muller transform可生成2個獨立的隨機變量:X,Y〜N(0, 1)

X=sqrt(-2ln(U))*cos(2*pi*V) 
Y=sqrt(-2ln(U))*sin(2*pi*V) 
where U,V~UNIFORM[0,1] 

從X〜N(0,1)到Z〜N(米,轉化秒2)是簡單的:Z = s*X + m

雖然可以生成這些隨機數,我站在@ Amigable Clark Kant建議使用現有的圖書館。

+0

如果平臺支持C++ 11,則新的強大的隨機數設施可用。它已經支持20個通用發行版。請參閱[C++ 11 FAQ](http://www.stroustrup.com/C++11FAQ.html#std-random)。 – ManuelAtWork