форма:
Генерация случайного числа в диапазоне [0,1] с равномерное распределение :
double X=((double)rand()/(double)RAND_MAX);
экспоненциальный
генерация экспоненциальной случайной величины с параметром лямбда:
-ln(U)/lambda (where U~Uniform[0,1]).
нормальный
самый простой способ [хотя и трудоемкий] использовать центральную предельную теорему , [суммировать достаточно равномерно распределенные числа], но на странице википедии есть другие методы, такие как 1024 * преобразование Мюллера , которое генерирует 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 об использовании существующей библиотеки.