Класс linear_congruential_engine
Создает случайную последовательность, используя линейный конгруэнтный алгоритм.
Синтаксис
class linear_congruential_engine{
public: // types
typedef UIntType result_type;
// engine characteristics
static constexpr result_type multiplier = a;
static constexpr result_type increment = c;
static constexpr result_type modulus = m;
static constexpr result_type min() { return c == 0u 1u: 0u; }
static constexpr result_type max() { return m - 1u; }
static constexpr result_type default_seed = 1u;
// constructors and seeding functions
explicit linear_congruential_engine(result_type s = default_seed);
template <class Sseq>
explicit linear_congruential_engine(Sseq& q);
void seed(result_type s = default_seed);
template <class Sseq>
void seed(Sseq& q);
// generating functions
result_type operator()();
void discard(unsigned long long z);
};
Параметры
UIntType
Беззнаковый целочисленный тип результата. Сведения о возможных типах см <. в случайном> порядке.
Объект
Множитель. Предварительные условия : см. раздел "Примечания".
C
Приращение. Предварительные условия : см. раздел "Примечания".
M
Остаток от деления. Предварительные условия : см. раздел "Примечания".
Участники
linear_congruential_engine::linear_congruential_engine
linear_congruential_engine::discard
linear_congruential_engine::max
linear_congruential_engine::min
linear_congruential_engine::operator()
linear_congruential_engine::seed
default_seed
— это член-константа, определенный как 1u
и используемый как значение по умолчанию для параметра linear_congruential_engine::seed
и конструктор с одним значением.
Дополнительные сведения о членах подсистемы см. в случайном <>порядке.
Замечания
Шаблон linear_congruential_engine
класса — это самый простой механизм генератора, но не самый быстрый или самый высокий уровень качества. Улучшением этого механизма является substract_with_carry_engine. Ни один из этих механизмов не обеспечивает такую же скорость и качество результатов, как mersenne_twister_engine.
Этот механизм формирует значения указанного пользователем беззнакового целого типа, используя рекуррентное соотношение (period) x(i) = (A * x(i-1) + C) mod M
.
Если значение M равно нулю, значение, используемое для этой операции модуля, равно numeric_limits<result_type>::max() + 1
. Последним возвращается состояние механизма или начальное значение, если функция operator()
не вызывалась.
Если значение M не равно нулю, значения аргументов шаблона A и C должны быть меньше M.
Хотя можно создать генератор на основе этого механизма напрямую, также можно использовать одно из этих предварительно заданных определений типов.
minstd_rand0
: Минимальный стандартный механизм 1988 (Льюис, Гудман и Миллер, 1969).
typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
minstd_rand
: Обновленный минимальный стандартный механизм minstd_rand0
(Парк, Миллер и Стокмайер, 1993).
typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
Подробные сведения о линейном конгруэнтном алгоритме см. в статье Википедии Линейный конгруэнтный генератор.
Требования
Заголовок:<random>
Пространство имен: std