2011-09-05 136 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