Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

boost::random in a nutshell

Boost Random Number Library - библиотека для генерации случайных чисел. Условно поделена на 3 части:

  1. Генераторы.

    Генератор - это класс, который производит случайные числа. Некий алгоритм, который, как правило, имеет параметры. Качество генератора сильно зависит от этих параметров. Для каждого алгоритма есть специализация с правильно подобранными параметрами. Алгоритмы имеют различные требования к памяти, разное качество случайных чисел и, естественно, разную скорость.

  2. Распределения.

    Распределение - закон, который описывает область значений случайной величины и вероятности их принятия. Распределения есть дискретные, непрерывные. Чаще всего используются равномерные распределения - uniform distributions.

  3. Их комбинации - вариаторы.

    Вариатор совмещает геренатор и распределение.

Примеры.

Равномерное дискретное распределение.

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 все описано так что черт ногу сломит :(

Отправить комментарий

Copyright 2007-2011 Chabster