std::linear_congruential_engine<UIntType,a,c,m>:: linear_congruential_engine
From cppreference.net
<
cpp
|
numeric
|
random
|
linear congruential engine
|
linear_congruential_engine
(
)
:
linear_congruential_engine
(
default_seed
)
{
}
|
(1) | (начиная с C++11) |
|
explicit
linear_congruential_engine
(
result_type value
)
;
|
(2) | (начиная с C++11) |
|
template
<
class
SeedSeq
>
explicit linear_congruential_engine ( SeedSeq & seq ) ; |
(3) | (начиная с C++11) |
|
linear_congruential_engine
(
const
linear_congruential_engine
&
other
)
;
|
(4) |
(начиная с C++11)
(неявно объявлен) |
Создает генератор псевдослучайных чисел.
1)
Конструктор по умолчанию.
-
Если механизм, созданный конструктором по умолчанию, имеет тип
std::minstd_rand0, то 10000-е последовательное его использование производит значение 1043618065 . -
Если механизм, созданный конструктором по умолчанию, имеет тип
std::minstd_rand, то 10000-е последовательное его использование производит значение 399268537 .
2)
Создает генератор с начальным значением
value
. Начальное
состояние
генератора определяется следующим образом:
- Если c % m == 0 и value % m == 0 оба true , состояние равно 1 .
- В противном случае состояние равно value % m .
3)
Конструирует генератор с последовательностью затравки
seq
. При заданном
std::
size_t
(
std::
log2
(
m
)
/
32
)
+
1
как
k
, начальное
состояние
генератора определяется следующим образом:
- Создаёт вымышленный массив a длиной k + 3 .
- Вызывает seq. generate ( a + 0 , a + k + 3 ) .
-
Пусть
S
равно
(∑
k-1
j=0 a j+3 ·2 32j
) mod m . - Если оба условия c % m == 0 и S == 0 являются true , устанавливает состояние генератора в 1 . В противном случае устанавливает состояние генератора в S .
Эта перегрузка участвует в разрешении перегрузки только если
SeedSeq
удовлетворяет требованиям
SeedSequence
.
4)
Конструктор копирования. При создании
*
this
==
other
выполняется условие
true
.
Содержание |
Параметры
| value | - | начальное значение для инициализации внутреннего состояния |
| seq | - | последовательность начальных значений для инициализации внутреннего состояния |
Сложность
1,2)
Константа.
3)
Такая же, как сложность вызова
seq.generate
.
4)
Константа.
Исключения
3)
Если
SeedSeq
не является
std::seed_seq
, выбрасывает исключения, выброшенные вызовом
seq.generate
.
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2181 | C++11 |
overload
(
3
)
would not throw even if the
seq.generate
call throws
|
propagates the exception |
| P0935R0 | C++11 | the default constructor was explicit | made implicit |
Смотрите также
|
устанавливает текущее состояние движка
(public member function) |