Ответ 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 использовать существующую библиотеку.