generando un número aleatorio con una distribución específica en c

Necesito una biblioteca con funciones para generar un número aleatorio, dado el promedio, la desviación estándar y usar una de las tres distribuciones: exponencial, normal o unificada.

incluso uno de los tres ayudaría. Estoy buscando algo como esto – http://www.codeproject.com/KB/recipes/zigurat.aspx , pero en c.

Gracias

uniforme:
Genere un número aleatorio en el rango [0,1] con distribución uniforme :

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

Exponencial
generando una variable aleatoria exponencial con el parámetro lambda:

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

normal:
la forma más sencilla [aunque requiere mucho tiempo] es usar el teorema del límite central , [sumr suficientes números distribuidos uniformemente] pero hay otros métodos en la página de wikipedia , como la transformadora de caja que genera 2 variables aleatorias independientes: 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] 

la transformación de X ~ N (0,1) a Z ~ N (m, s ^ ​​2) es simple: Z = s*X + m

Aunque PUEDES generar estos números aleatorios, estoy de acuerdo con la sugerencia de @Amigable Clark Kant de usar una biblioteca existente.

¿Puedo recomendar la Biblioteca Científica GNU para uso o para inspiración? Tiene varias distribuciones de números aleatorios y está diseñado para ser utilizado desde C y C ++.