Генерируя случайное число с определенным распределением в c

Мне нужна библиотека с функциями для генерации случайного числа, заданное среднее, стандартное отклонение и использование одного из трех распределений - экспоненциального, нормального или унифицированного.

даже один из трех поможет. Я ищу что-то вроде этого http://www.codeproject.com/KB/recipes/zigurat.aspx, но в c.

спасибо

Ответ 1

форма:
Создайте случайное число в диапазоне [0,1] с равномерным распределением:

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

экспоненциальный
генерирование экспоненциальной случайной переменной с параметром lambda:

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

нормально Самый простой способ [хотя и требует много времени] использовать центральную предельную теорему [достаточно суммировать равномерно распределенные числа], но есть и другие методы в странице wikipedia, например, преобразование коробки muller который генерирует 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 (m, s ^ ​​2) просто: Z = s*X + m

Хотя вы можете генерировать эти случайные числа, я поддерживаю предложение @Amigable Clark Kant использовать существующую библиотеку.