boost::random in a nutshell
Boost Random Number Library - библиотека для генерации случайных чисел. Условно поделена на 3 части:
-
Генераторы.
Генератор - это класс, который производит случайные числа. Некий алгоритм, который, как правило, имеет параметры. Качество генератора сильно зависит от этих параметров. Для каждого алгоритма есть специализация с правильно подобранными параметрами. Алгоритмы имеют различные требования к памяти, разное качество случайных чисел и, естественно, разную скорость.
-
Распределения.
Распределение - закон, который описывает область значений случайной величины и вероятности их принятия. Распределения есть дискретные, непрерывные. Чаще всего используются равномерные распределения - uniform distributions.
- Их комбинации - вариаторы.
Вариатор совмещает геренатор и распределение.
Примеры.
Равномерное дискретное распределение.
boost::int32_t number; boost::hellekalek1995 generator(GetTickCount()); number = generator(); boost::uniform_smallint<BYTE> distribution(1, 10); BYTE result; result = distribution(generator); boost::variate_generator<boost::hellekalek1995, boost::uniform_smallint<BYTE>> random(generator, distribution); result = random();
Кстати, генератору надо дать пинка
- стартовое значение (seed). Я обычно использую GetTickCount
.
Распределение Бернулли.
boost::int32_t number; boost::hellekalek1995 generator(GetTickCount()); number = generator(); bool success; boost::bernoulli_distribution<> distribution(0.2); success = distribution(generator); boost::variate_generator<boost::hellekalek1995, boost::bernoulli_distribution<>> random(generator, distribution); success = random();
1 коммент.:
Спасибо за введение. На boost.org все описано так что черт ногу сломит :(
Отправить комментарий