生成具有特定分布的随机数字c

问题描述:

我需要一个函数库,用于生成随机数,给定的平均值,标准偏差,并使用三种分布之一 - 指数,正态或统一。生成具有特定分布的随机数字c

即使三者中的一个都会有所帮助。 我在找这样的东西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在c。

感谢

均匀:
生成在范围[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

我可能会建议GNU Scientific Library无论是使用或灵感?它有几个Random Number Distributions,设计用于C和C++。