Пространства имён
Варианты
Действия

std::seed_seq::generate

Материал из cppreference.com
< cpp‎ | numeric‎ | random‎ | seed seq

 
 
Numerics библиотеки
Общие математические функции
Плавающей точкой окружающей среды
Комплексные числа
Числовых массивов
Псевдослучайных чисел поколения
Во время компиляции рациональной арифметики (C++11)
Generic числовые операции
Оригинал:
Generic numeric operations
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
iota(C++11)
accumulate
inner_product
adjacent_difference
partial_sum
 
Псевдослучайных чисел поколения
Двигатели и адаптеры
Оригинал:
Engines and engine adaptors
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
linear_congruential_engine(C++11)
mersenne_twister_engine(C++11)
subtract_with_carry_engine(C++11)
discard_block_engine(C++11)
independent_bits_engine(C++11)
shuffle_order_engine(C++11)
Генераторы
Оригинал:
Generators
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
random_device(C++11)
Распределения
Оригинал:
Distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Равномерное распределение
Оригинал:
Uniform distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
uniform_int_distribution(C++11)
uniform_real_distribution(C++11)
generate_canonical(C++11)
Бернулли распределения
Оригинал:
Bernoulli distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
bernoulli_distribution(C++11)
binomial_distribution(C++11)
negative_binomial_distribution(C++11)
geometric_distribution(C++11)
Распределения Пуассона
Оригинал:
Poisson distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
poisson_distribution(C++11)
exponential_distribution(C++11)
gamma_distribution(C++11)
weibull_distribution(C++11)
extreme_value_distribution(C++11)
Нормальное распределение
Оригинал:
Normal distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
normal_distribution(C++11)
lognormal_distribution(C++11)
chi_squared_distribution(C++11)
cauchy_distribution(C++11)
fisher_f_distribution(C++11)
student_t_distribution(C++11)
Выборка распределения
Оригинал:
Sampling distributions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
discrete_distribution(C++11)
piecewise_constant_distribution(C++11)
piecewise_linear_distribution(C++11)
Семенной последовательности
Оригинал:
Seed Sequences
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
seed_seq(C++11)
C библиотеки
Оригинал:
C library
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
rand
srand
RAND_MAX
 
std::seed_seq
Функции-члены
seed_seq::seed_seq
seed_seq::generate
seed_seq::size
seed_seq::param
 
template< class RandomIt >
void generate( RandomIt begin, RandomIt end );
(начиная с C++11)
Заполняет диапазон [begin, end) с беззнаковых целых значений i, 0 ≤ i < 232
, на основе данных, первоначально предусмотренных в конструкторе этого seed_seq. Полученные значения распределены в течение всего 32-битном диапазоне, даже если начальные значения были сильно смещены.
Оригинал:
Fills the range [begin, end) with unsigned integer values i, 0 ≤ i < 232
, based on the data originally provided in the constructor of this seed_seq. The produced values are distributed over the entire 32-bit range even if the initial values were strongly biased.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Используется следующий алгоритм (адаптировано из инициализации последовательности Мерсенна Twister генератор Makoto Matsumoto and Takuji Nishimura, включая улучшения, внесенные Mutsuo Saito in 2007)
Оригинал:
The following algorithm is used (adapted from the initialization sequence of the Mersenne Twister generator by Makoto Matsumoto and Takuji Nishimura, incorporating the improvements made by Mutsuo Saito in 2007)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Если begin == end, ничего не делать. В противном случае
    Оригинал:
    If begin == end, do nothing. Otherwise,
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Во-первых, установить каждый элемент выходного диапазона на значение 0x8b8b8b8b
    Оригинал:
    First, set each element of the output range to the value 0x8b8b8b8b
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  • Преобразование элементов выходного диапазона в соответствии со следующим алгоритмом:
    Оригинал:
    Transform the elements of the output range according to the following algorithm:
    Текст был переведён автоматически используя Переводчик Google.
    Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

For k = 0,..., m-1

где m=max(s+1, n)
Оригинал:
where m=max(s+1, n)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

and n=begin-end
and s=v.size()

и v является частным контейнер, содержащий значения, первоначально предусмотренных конструктору этого объекта seed_seq,
Оригинал:
and v is the private container holding the values originally provided by the constructor of this seed_seq object,
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
  1. begin[k+p] += r1
  2. begin[k+q] += r2
  3. begin[k] = r2,
где p=(n-t)/2
Оригинал:
where p=(n-t)/2
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

and q=p+t
and t=(n >= 623) ? 11 : (n >= 68) ? 7 : (n >= 39) ? 5 : (n >= 7) ? 3 : (n - 1) / 2
and r1=1664525 * T(begin[k]^begin[k+p]^begin[k−1])
and T(x) = x ^ (x << 27)
and r2=r1+s if k==0, r2=r1 + k%n + v[k-1] if 0<k<=s, r2=r1 + k%n if k>s.

For k = m,..., m+n-1,

  1. begin[k+p] ^= r3
  2. begin[k+q] ^= r4
  3. begin[k]=r4
где r3 = 1566083941 * T(begin[k]+begin[k+p]+begin[k-1])
Оригинал:
where r3 = 1566083941 * T(begin[k]+begin[k+p]+begin[k-1])
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

and r4=r3 - k%n

где все расчеты производятся modulo 232
и где индексации выходного диапазона (begin[x]) берется modulo n.
Оригинал:
where all calculations are performed modulo 232
and where the indexing of the output range (begin[x]) is taken modulo n.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Параметры

begin, end -
изменяемые произвольным доступом итераторы std::iterator_traits<>::value_type которого является беззнаковое целое число типа подходят для хранения 32-разрядных значений
Оригинал:
mutable random-access iterators whose std::iterator_traits<>::value_type is an unsigned integer type suitable for storing 32-bit values
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Требования к типам
-
RandomIt должен соответствовать требованиям RandomAccessIterator.

[править] Возвращаемое значение

нет, результаты записываются в [begin, end) диапазон.
Оригинал:
none, the results are written to the [begin, end) range.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

#include <random>
#include <iostream>
 
int main()
{
    std::seed_seq seq({1,2,3,4,5});
    std::vector<std::uint32_t> seeds(10);
    seq.generate(seeds.begin(), seeds.end());
// Step 1: fill with 0x8b8b8b8b
// seeds = {2341178251, 2341178251, 2341178251, 2341178251, 2341178251,
//          2341178251, 2341178251, 2341178251, 2341178251, 2341178251 }
//
// Step 2:
// n = 10, s = 5, t = 3, p = 3, q = 6, m = 10
//
// First iteration, k = 0; r1 = 1371501266, r2 = 1371501271
//
// seeds = {1371501271, 2341178251, 2341178251, 3712679517, 2341178251,
//          2341178251, 3712679522, 2341178251, 2341178251, 2341178251 }
//
// Iterations from k = 1 to k = 5 (r2 = r1 + k%n + v[k-1])
//
// r1 = 2786190137, 3204727651, 4173325571, 1979226628, 401983366
// r2 = 2786190139, 3204727655, 4173325577, 1979226636, 401983376
//
// seeds = {3350727907, 3188173515, 3204727655, 4173325577, 1979226636,
//           401983376, 3591037797, 2811627722, 1652921976, 2219536532 }
//
// Iterations from k = 6 to k = 9 (r2 = r1 + k%n)
//
// r1 = 2718637909, 1378394210, 2297813071, 1608643617
// r2 = 2718637915, 1378394217, 2297813079, 1608643626
//
// seeds = { 434154821, 1191019290, 3237041891, 1256752498, 4277039715,
//          2010627002, 2718637915, 1378394217, 2297813079, 1608643626 }
//
// Step 3
// iterations from k = 10 to k = 19, using ^= to modify the output
//
// r1 = 1615303485, 3210438310, 893477041, 2884072672, 1918321961,
// r2 = 1615303485, 3210438309, 893477039, 2884072669, 1918321957
//
// seeds = { 303093272, 3210438309,  893477039, 2884072669, 1918321957,
//          1117182731, 1772877958, 2669970405, 3182737656, 4094066935 }
//
// r1 =  423054846, 46783064, 3904109085, 1534123446, 1495905687
// r2 =  423054841, 46783058, 3904109078, 1534123438, 1495905678
//
// seeds = { 4204997637, 4246533866, 1856049002, 1129615051, 690460811,
//           1075771511,   46783058, 3904109078, 1534123438, 1495905678 }
 
    for(std::uint32_t n : seeds)
        std::cout << n << '\n';
}

Вывод:

4204997637
4246533866
1856049002
1129615051
690460811
1075771511
46783058
3904109078
1534123438
1495905678