tgoop.com/cppproglib/6125
Create:
Last Update:
Last Update:
🎲 std::random vs rand() — генерация случайных чисел
Старый rand()
из Си имеет множество проблем: плохое качество, ограниченный диапазон, глобальное состояние. В C++11
появились современные генераторы из <random>
.
#include <cstdlib>
#include <ctime>
srand(time(nullptr)); // Предсказуемо!
int dice = rand() % 6 + 1; // Неравномерное распределение!
double prob = rand() / (double)RAND_MAX; // Плохая точность
#include <random>
// Инициализация генератора (один раз)
std::random_device rd;
std::mt19937 gen(rd()); // Mersenne Twister
// Равномерное распределение [1, 6]
std::uniform_int_distribution dice(1, 6);
int roll = dice(gen);
// Вещественное [0.0, 1.0)
std::uniform_real_distribution prob(0.0, 1.0);
double p = prob(gen);
// Нормальное распределение
std::normal_distribution normal(0.0, 1.0);
double value = normal(gen);
• uniform_int_distribution — целые числа
• uniform_real_distribution — вещественные
• normal_distribution — гауссово
• bernoulli_distribution — булево
• exponential_distribution, poisson_distribution и другие
Библиотека C/C++ разработчика
#буст