Namespaces
Variants

Standard library header <random> (C++11)

From cppreference.net
Standard library headers

Этот заголовок является частью библиотеки генерации псевдослучайных чисел .

Содержание

Включения

std::initializer_list шаблон класса

Концепции

Требования к генераторам равномерно распределенных случайных битов
определяет, что тип соответствует требованиям генератора равномерно распределенных случайных битов
(концепт)

Классы

Генераторы случайных чисел
реализует линейный конгруэнтный алгоритм
(шаблон класса)
реализует алгоритм Mersenne twister
(шаблон класса)
реализует алгоритм вычитания с переносом ( запаздывающий Фибоначчи )
(шаблон класса)
счетчиковый параллелизуемый генератор
(шаблон класса)
Адаптеры генераторов случайных чисел
отбрасывает часть вывода генератора случайных чисел
(шаблон класса)
упаковывает выходные данные генератора случайных чисел в блоки заданного количества бит
(шаблон класса)
выводит результат работы генератора случайных чисел в другом порядке
(шаблон класса)
Предопределенные генераторы
minstd_rand0 (C++11) std:: linear_congruential_engine < std:: uint_fast32_t ,
16807 , 0 , 2147483647 >

Обнаружен в 1969 году Льюисом, Гудманом и Миллером, принят как "Минимальный стандарт" в 1988 году Парком и Миллером

minstd_rand (C++11)

std:: linear_congruential_engine < std:: uint_fast32_t ,
48271 , 0 , 2147483647 >
Новый "Минимальный стандарт", рекомендованный Парком, Миллером и Стокмайером в 1993 году

mt19937 (C++11)

std:: mersenne_twister_engine < std:: uint_fast32_t ,
32 , 624 , 397 , 31 ,
0x9908b0df , 11 ,
0xffffffff , 7 ,
0x9d2c5680 , 15 ,
0xefc60000 , 18 , 1812433253 >
32-битный вихрь Мерсенна от Мацумото и Нисимуры, 1998

mt19937_64 (C++11)

std:: mersenne_twister_engine < std:: uint_fast64_t ,
64 , 312 , 156 , 31 ,
0xb5026f5aa96619e9 , 29 ,
0x5555555555555555 , 17 ,
0x71d67fffeda60000 , 37 ,
0xfff7eee000000000 , 43 ,
6364136223846793005 >
64-битный вихрь Мерсенна от Мацумото и Нисимуры, 2000

ranlux24_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std:: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >
ranlux24 (C++11) std:: discard_block_engine < std:: ranlux24_base , 223 , 23 >

24-битный генератор RANLUX от Мартина Люшера и Фреда Джеймса, 1994

ranlux48 (C++11) std:: discard_block_engine < std:: ranlux48_base , 389 , 11 >

48-битный генератор RANLUX от Мартина Люшера и Фреда Джеймса, 1994

knuth_b (C++11) std:: shuffle_order_engine < std:: minstd_rand0 , 256 >
philox4x32 (C++26) std:: philox_engine < std:: uint_fast32_t , 32 , 4 , 10 ,
0xCD9E8D57 , 0x9E3779B9 ,
0xD2511F53 , 0xBB67AE85 >
philox4x64 (C++26) std:: philox_engine < std:: uint_fast64_t , 64 , 4 , 10 ,
0xCA5A826395121157 , 0x9E3779B97F4A7C15 ,
0xD2E7470EE14C6C93 , 0xBB67AE8584CAA73B >
default_random_engine (C++11) тип RandomNumberEngine с реализацией, определяемой реализацией
Недетерминированные случайные числа
недетерминированный генератор случайных чисел, использующий аппаратный источник энтропии
(класс)
Равномерные распределения
генерирует целочисленные значения, равномерно распределенные в заданном диапазоне
(шаблон класса)
генерирует вещественные значения, равномерно распределенные в заданном диапазоне
(шаблон класса)
Распределения Бернулли
генерирует bool значения с распределением Бернулли
(класс)
генерирует целочисленные значения согласно биномиальному распределению
(шаблон класса)
генерирует целочисленные значения по отрицательному биномиальному распределению
(шаблон класса)
генерирует целочисленные значения согласно геометрическому распределению
(шаблон класса)
Распределения Пуассона
генерирует целочисленные значения в соответствии с распределением Пуассона
(шаблон класса)
генерирует вещественные значения по экспоненциальному распределению
(шаблон класса)
генерирует вещественные значения согласно гамма-распределению
(шаблон класса)
генерирует вещественные значения по распределению Вейбулла
(шаблон класса)
производит вещественные значения по распределению экстремальных значений
(шаблон класса)
Нормальные распределения
генерирует вещественные значения с стандартным нормальным (гауссовым) распределением
(шаблон класса)
генерирует вещественные значения с логнормальным распределением
(шаблон класса)
генерирует вещественные значения согласно распределению хи-квадрат
(шаблон класса)
генерирует вещественные значения согласно распределению Коши
(шаблон класса)
генерирует вещественные значения по F-распределению Фишера
(шаблон класса)
генерирует вещественные значения согласно распределению Стьюдента
(шаблон класса)
Выборочные распределения
генерирует целочисленные значения по дискретному распределению
(шаблон класса)
генерирует вещественные значения, распределенные на постоянных подинтервалах
(шаблон класса)
генерирует вещественные значения, распределенные по определенным подинтервалам
(шаблон класса)
Утилиты
(C++11)
универсальный генератор скремблированных последовательностей затравки с устранением смещения
(класс)

Функции

равномерно распределяет вещественные значения заданной точности в диапазоне [ 0 , 1 )
(шаблон функции)
заполняет диапазон случайными числами из равномерного генератора случайных битов
(функциональный объект алгоритма)

Синопсис

#include <initializer_list>
namespace std {
  // требования к генератору равномерно распределенных случайных битов
  template<class G>
  concept uniform_random_bit_generator = /* см. описание */; // freestanding
  // шаблон класса linear_congruential_engine
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine;                             // частично независимый
  // шаблон класса mersenne_twister_engine
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine;                                // частично независимый
  // шаблон класса subtract_with_carry_engine
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine;                             // частично независимый
  // шаблон класса discard_block_engine
  template<class Engine, size_t p, size_t r>
  class discard_block_engine;                                   // частично независимый
  // шаблон класса independent_bits_engine
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine;                                // частично независимый
  // шаблон класса shuffle_order_engine
  template<class Engine, size_t k>
  class shuffle_order_engine;
  // шаблон класса philox_engine
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine;                                          // частично независимый
  // движки и адаптеры движков с предопределенными параметрами
  using minstd_rand0          = /* см. описание */;          // freestanding
  using minstd_rand           = /* см. описание */;          // freestanding
  using mt19937               = /* см. описание */;          // freestanding
  using mt19937_64            = /* см. описание */;          // freestanding
  using ranlux24_base         = /* см. описание */;          // freestanding
  using ranlux48_base         = /* см. описание */;          // freestanding
  using ranlux24              = /* см. описание */;          // freestanding
  using ranlux48              = /* см. описание */;          // freestanding
  using knuth_b               = /* см. описание */;
  using philox4x32            = /* см. описание */;          // freestanding
  using philox4x64            = /* см. описание */;          // freestanding
  using default_random_engine = /* см. описание */;
  // class random_device
  class random_device;
  // класс seed_seq
  class seed_seq;
  // шаблон функции generate_canonical
  template<class RealType, size_t digits, class URBG>
  RealType generate_canonical(URBG& g);
  namespace ranges {
    // generate_random
    template<class R, class G>
      requires output_range<R, invoke_result_t<G&>> &&
               uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g);
    template<class G, output_iterator<invoke_result_t<G&>> O, sentinel_for<O> S>
      requires uniform_random_bit_generator<remove_cvref_t<G>>
    constexpr O generate_random(O first, S last, G&& g);
    template<class R, class G, class D>
      requires output_range<R, invoke_result_t<D&, G&>> && invocable<D&, G&> &&
               uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g, D&& d);
    template<class G, class D,
             output_iterator<invoke_result_t<D&, G&>> O, sentinel_for<O> S>
      requires invocable<D&, G&> && uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr O generate_random(O first, S last, G&& g, D&& d);
  }
  // шаблон класса uniform_int_distribution
  template<class IntType = int>
  class uniform_int_distribution;                               // частично независимый
  // шаблон класса uniform_real_distribution
  template<class RealType = double>
  class uniform_real_distribution;
  // класс bernoulli_distribution
  class bernoulli_distribution;
  // шаблон класса binomial_distribution
  template<class IntType = int>
  class binomial_distribution;
  // шаблон класса geometric_distribution
  template<class IntType = int>
  class geometric_distribution;
  // шаблон класса negative_binomial_distribution
  template<class IntType = int>
  class negative_binomial_distribution;
  // шаблон класса poisson_distribution
  template<class IntType = int>
  class poisson_distribution;
  // шаблон класса exponential_distribution
  template<class RealType = double>
  class exponential_distribution;
  // шаблон класса gamma_distribution
  template<class RealType = double>
  class gamma_distribution;
  // шаблон класса weibull_distribution
  template<class RealType = double>
  class weibull_distribution;
  // шаблон класса extreme_value_distribution
  template<class RealType = double>
  class extreme_value_distribution;
  // шаблон класса normal_distribution
  template<class RealType = double>
  class normal_distribution;
  // шаблон класса lognormal_distribution
  template<class RealType = double>
  class lognormal_distribution;
  // шаблон класса chi_squared_distribution
  template<class RealType = double>
  class chi_squared_distribution;
  // шаблон класса cauchy_distribution
  template<class RealType = double>
  class cauchy_distribution;
  // шаблон класса fisher_f_distribution
  template<class RealType = double>
  class fisher_f_distribution;
  // шаблон класса student_t_distribution
  template<class RealType = double>
  class student_t_distribution;
  // шаблон класса discrete_distribution
  template<class IntType = int>
  class discrete_distribution;
  // шаблон класса piecewise_constant_distribution
  template<class RealType = double>
  class piecewise_constant_distribution;
  // шаблон класса piecewise_linear_distribution
  template<class RealType = double>
  class piecewise_linear_distribution;
}

Концепт uniform_random_bit_generator

namespace std {
  template<class G>
  concept uniform_random_bit_generator =
    invocable<G&> && unsigned_integral<invoke_result_t<G&>> && requires {
      {
        G::min()
      } -> same_as<invoke_result_t<G&>>;
      {
        G::max()
      } -> same_as<invoke_result_t<G&>>;
      requires bool_constant<(G::min() < G::max())>::value;
    };
}

Шаблон класса std::linear_congruential_engine

namespace std {
  template<class UIntType, UIntType a, UIntType c, UIntType m>
  class linear_congruential_engine
  {
  public:
    // типы
    using result_type = UIntType;
    // характеристики генератора
    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;
    // конструкторы и функции инициализации
    linear_congruential_engine()
      : linear_congruential_engine(default_seed)
    {
    }
    explicit linear_congruential_engine(result_type s);
    template<class Sseq>
    explicit linear_congruential_engine(Sseq& q);
    void seed(result_type s = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const linear_congruential_engine& x,
                           const linear_congruential_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещен
                 const linear_congruential_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещен
                 linear_congruential_engine& x);
  };
}

Шаблон класса std::mersenne_twister_engine

namespace std {
  template<class UIntType,
           size_t w,
           size_t n,
           size_t m,
           size_t r,
           UIntType a,
           size_t u,
           UIntType d,
           size_t s,
           UIntType b,
           size_t t,
           UIntType c,
           size_t l,
           UIntType f>
  class mersenne_twister_engine
  {
  public:
    // типы
    using result_type = UIntType;
    // характеристики движка
    static constexpr size_t word_size                   = w;
    static constexpr size_t state_size                  = n;
    static constexpr size_t shift_size                  = m;
    static constexpr size_t mask_bits                   = r;
    static constexpr UIntType xor_mask                  = a;
    static constexpr size_t tempering_u                 = u;
    static constexpr UIntType tempering_d               = d;
    static constexpr size_t tempering_s                 = s;
    static constexpr UIntType tempering_b               = b;
    static constexpr size_t tempering_t                 = t;
    static constexpr UIntType tempering_c               = c;
    static constexpr size_t tempering_l                 = l;
    static constexpr UIntType initialization_multiplier = f;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    static constexpr result_type default_seed = 5489u;
    // конструкторы и функции инициализации
    mersenne_twister_engine()
      : mersenne_twister_engine(default_seed)
    {
    }
    explicit mersenne_twister_engine(result_type value);
    template<class Sseq>
    explicit mersenne_twister_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const mersenne_twister_engine& x,
                           const mersenne_twister_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещенный
                 const mersenne_twister_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещенный
                 mersenne_twister_engine& x);
  };
}

Шаблон класса std::subtract_with_carry_engine

namespace std {
  template<class UIntType, size_t w, size_t s, size_t r>
  class subtract_with_carry_engine
  {
  public:
    // типы
    using result_type = UIntType;
    // характеристики движка
    static constexpr size_t word_size = w;
    static constexpr size_t short_lag = s;
    static constexpr size_t long_lag  = r;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*m - 1*/; }
    static constexpr uint_least32_t default_seed = 19780503u;
    // конструкторы и функции инициализации
    subtract_with_carry_engine()
      : subtract_with_carry_engine(0u)
    {
    }
    explicit subtract_with_carry_engine(result_type value);
    template<class Sseq>
    explicit subtract_with_carry_engine(Sseq& q);
    void seed(result_type value = 0u);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const subtract_with_carry_engine& x,
                           const subtract_with_carry_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещенный
                 const subtract_with_carry_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещенный
                 subtract_with_carry_engine& x);
  };
}

Шаблон класса std::philox_engine

namespace std {
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
  class philox_engine
  {
    static constexpr size_t /*array-size*/ = n / 2; // только для демонстрации
  public:
    // типы
    using result_type = UIntType;
    // характеристики генератора
    static constexpr size_t word_size   = w;
    static constexpr size_t word_count  = n;
    static constexpr size_t round_count = r;
    static constexpr array<result_type, /*array-size*/> multipliers;
    static constexpr array < result_type, @только для демонстрацииid { array - size > }
    @round_consts;
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return m - 1; }
    static constexpr result_type default_seed = 20111115u;
    // конструкторы и функции инициализации
    philox_engine()
      : philox_engine(default_seed)
    {
    }
    explicit philox_engine(result_type value);
    template<class Sseq>
    explicit philox_engine(Sseq& q);
    void seed(result_type value = default_seed);
    template<class Sseq>
    void seed(Sseq& q);
    void set_counter(const array<result_type, n>& counter);
    // операторы сравнения
    friend bool operator==(const philox_engine& x, const philox_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещенный
                 const philox_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещенный
                 philox_engine& x);
  };
}

Шаблон класса std::discard_block_engine

namespace std {
  template<class Engine, size_t p, size_t r>
  class discard_block_engine
  {
  public:
    // типы
    using result_type = typename Engine::result_type;
    // характеристики движка
    static constexpr size_t block_size = p;
    static constexpr size_t used_block = r;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // конструкторы и функции инициализации
    discard_block_engine();
    explicit discard_block_engine(const Engine& e);
    explicit discard_block_engine(Engine&& e);
    explicit discard_block_engine(result_type s);
    template<class Sseq>
    explicit discard_block_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const discard_block_engine& x, const discard_block_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // функции свойств
    const Engine& base() const noexcept { return e; }
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещенный
                 const discard_block_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещенный
                 discard_block_engine& x);
  private:
    Engine e; // только для демонстрации
    size_t n; // только для демонстрации
  };
}

Шаблон класса std::independent_bits_engine

namespace std {
  template<class Engine, size_t w, class UIntType>
  class independent_bits_engine
  {
  public:
    // типы
    using result_type = UIntType;
    // характеристики движка
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return /*2^w - 1*/; }
    // конструкторы и функции инициализации
    independent_bits_engine();
    explicit independent_bits_engine(const Engine& e);
    explicit independent_bits_engine(Engine&& e);
    explicit independent_bits_engine(result_type s);
    template<class Sseq>
    explicit independent_bits_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const independent_bits_engine& x,
                           const independent_bits_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // функции свойств
    const Engine& base() const noexcept { return e; }
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещенный
                 const independent_bits_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещенный
                 independent_bits_engine& x);
  private:
    Engine e; // только для демонстрации
  };
}

Шаблон класса std::shuffle_order_engine

namespace std {
  template<class Engine, size_t k>
  class shuffle_order_engine
  {
  public:
    // типы
    using result_type = typename Engine::result_type;
    // характеристики движка
    static constexpr size_t table_size = k;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }
    // конструкторы и функции инициализации
    shuffle_order_engine();
    explicit shuffle_order_engine(const Engine& e);
    explicit shuffle_order_engine(Engine&& e);
    explicit shuffle_order_engine(result_type s);
    template<class Sseq>
    explicit shuffle_order_engine(Sseq& q);
    void seed();
    void seed(result_type s);
    template<class Sseq>
    void seed(Sseq& q);
    // операторы сравнения
    friend bool operator==(const shuffle_order_engine& x, const shuffle_order_engine& y);
    // функции генерации
    result_type operator()();
    void discard(unsigned long long z);
    // функции свойств
    const Engine& base() const noexcept { return e; }
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const shuffle_order_engine& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    shuffle_order_engine& x);
  private:
    Engine e;         // только для демонстрации
    result_type V[k]; // только для демонстрации
    result_type Y;    // только для демонстрации
  };
}

Движки и адаптеры движков с предопределёнными параметрами

namespace std {
using minstd_rand0 = linear_congruential_engine<uint_fast32_t, 16'807, 0, 2'147'483'647>;
using minstd_rand = linear_congruential_engine<uint_fast32_t, 48'271, 0, 2'147'483'647>;
using mt19937 = mersenne_twister_engine<uint_fast32_t,
                                        32,
                                        624,
                                        397,
                                        31,
                                        0x9908'b0df,
                                        11,
                                        0xffff'ffff,
                                        7,
                                        0x9d2c'5680,
                                        15,
                                        0xefc6'0000,
                                        18,
                                        1'812'433'253>; //'
using mt19937_64 = mersenne_twister_engine<uint_fast64_t,
                                           64,
                                           312,
                                           156,
                                           31,
                                           0xb502'6f5a'a966'19e9,
                                           29,
                                           0x5555'5555'5555'5555,
                                           17,
                                           0x71d6'7fff'eda6'0000,
                                           37,
                                           0xfff7'eee0'0000'0000,
                                           43,
                                           6'364'136'223'846'793'005>;
using ranlux24_base = subtract_with_carry_engine<uint_fast32_t, 24, 10, 24>;
using ranlux48_base = subtract_with_carry_engine<uint_fast64_t, 48, 5, 12>;
using ranlux24 = discard_block_engine<ranlux24_base, 223, 23>;
using ranlux48 = discard_block_engine<ranlux48_base, 389, 11>;
using knuth_b = shuffle_order_engine<minstd_rand0, 256>;
using default_random_engine = /* определяемый реализацией */;
using philox4x32 = philox_engine<uint_fast32_t,
                                 32,
                                 4,
                                 10,
                                 0xD2511F53,
                                 0x9E3779B9,
                                 0xCD9E8D57,
                                 0xBB67AE85>;
using philox4x64 = philox_engine<uint_fast64_t,
                                 64,
                                 4,
                                 10,
                                 0xD2E7470EE14C6C93,
                                 0x9E3779B97F4A7C15,
                                 0xCA5A826395121157,
                                 0xBB67AE8584CAA73B>;
}

Класс std::random_device

namespace std {
  class random_device
  {
  public:
    // типы
    using result_type = unsigned int;
    // характеристики генератора
    static constexpr result_type min() { return numeric_limits<result_type>::min(); }
    static constexpr result_type max() { return numeric_limits<result_type>::max(); }
    // конструкторы
    random_device()
      : random_device(/* implementation-defined */)
    {
    }
    explicit random_device(const string& token);
    // функции генерации
    result_type operator()();
    // функции свойств
    double entropy() const noexcept;
    // функции копирования отсутствуют
    random_device(const random_device&)  = delete;
    void operator=(const random_device&) = delete;
  };
}

Класс std::seed_seq

namespace std {
  class seed_seq
  {
  public:
    // типы
    using result_type = uint_least32_t;
    // конструкторы
    seed_seq() noexcept;
    template<class T>
    seed_seq(initializer_list<T> il);
    template<class InputIter>
    seed_seq(InputIter begin, InputIter end);
    // функции генерации
    template<class RandomAccessIter>
    void generate(RandomAccessIter begin, RandomAccessIter end);
    // функции свойств
    size_t size() const noexcept;
    template<class OutputIter>
    void param(OutputIter dest) const;
    // запрещённые функции копирования
    seed_seq(const seed_seq&)       = delete;
    void operator=(const seed_seq&) = delete;
  private:
    vector<result_type> v; // только для демонстрации
  };
}

Шаблон класса std::uniform_int_distribution

namespace std {
  template<class IntType = int>
  class uniform_int_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    uniform_int_distribution()
      : uniform_int_distribution(0)
    {
    }
    explicit uniform_int_distribution(IntType a,
                                      IntType b = numeric_limits<IntType>::max());
    explicit uniform_int_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const uniform_int_distribution& x,
                           const uniform_int_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>&
      operator<<(basic_ostream<CharT, Traits>& os, // размещен
                 const uniform_int_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>&
      operator>>(basic_istream<CharT, Traits>& is, // размещен
                 uniform_int_distribution& x);
  };
}

Шаблон класса std::uniform_real_distribution

namespace std {
  template<class RealType = double>
  class uniform_real_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    uniform_real_distribution()
      : uniform_real_distribution(0.0)
    {
    }
    explicit uniform_real_distribution(RealType a, RealType b = 1.0);
    explicit uniform_real_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const uniform_real_distribution& x,
                           const uniform_real_distribution& y);
    // генерирующие функции
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    result_type a() const;
    result_type b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const uniform_real_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    uniform_real_distribution& x);
  };
}

Класс std::bernoulli_distribution

namespace std {
  class bernoulli_distribution
  {
  public:
    // типы
    using result_type = bool;
    using param_type  = /* unspecified */;
    // конструкторы и функции сброса
    bernoulli_distribution()
      : bernoulli_distribution(0.5)
    {
    }
    explicit bernoulli_distribution(double p);
    explicit bernoulli_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const bernoulli_distribution& x,
                           const bernoulli_distribution& y);
    // генерирующие функции
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const bernoulli_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    bernoulli_distribution& x);
  };
}

Шаблон класса std::binomial_distribution

namespace std {
  template<class IntType = int>
  class binomial_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    binomial_distribution()
      : binomial_distribution(1)
    {
    }
    explicit binomial_distribution(IntType t, double p = 0.5);
    explicit binomial_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const binomial_distribution& x,
                           const binomial_distribution& y);
    // генерирующие функции
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    IntType t() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода и вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    binomial_distribution& x);
  };
}

Шаблон класса std::geometric_distribution

namespace std {
  template<class IntType = int>
  class geometric_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    geometric_distribution()
      : geometric_distribution(0.5)
    {
    }
    explicit geometric_distribution(double p);
    explicit geometric_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const geometric_distribution& x,
                           const geometric_distribution& y);
    // генерирующие функции
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const geometric_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    geometric_distribution& x);
  };
}

Шаблон класса std::negative_binomial_distribution

namespace std {
  template<class IntType = int>
  class negative_binomial_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    negative_binomial_distribution()
      : negative_binomial_distribution(1)
    {
    }
    explicit negative_binomial_distribution(IntType k, double p = 0.5);
    explicit negative_binomial_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const negative_binomial_distribution& x,
                           const negative_binomial_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    IntType k() const;
    double p() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const negative_binomial_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    negative_binomial_distribution& x);
  };
}

Шаблон класса std::poisson_distribution

namespace std {
  template<class IntType = int>
  class poisson_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    poisson_distribution()
      : poisson_distribution(1.0)
    {
    }
    explicit poisson_distribution(double mean);
    explicit poisson_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const poisson_distribution& x, const poisson_distribution& y);
    // генерирующие функции
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    double mean() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const poisson_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    poisson_distribution& x);
  };
}

Шаблон класса std::exponential_distribution

namespace std {
  template<class RealType = double>
  class exponential_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    exponential_distribution()
      : exponential_distribution(1.0)
    {
    }
    explicit exponential_distribution(RealType lambda);
    explicit exponential_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const exponential_distribution& x,
                           const exponential_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType lambda() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const exponential_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    exponential_distribution& x);
  };
}

Шаблон класса std::gamma_distribution

namespace std {
  template<class RealType = double>
  class gamma_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    gamma_distribution()
      : gamma_distribution(1.0)
    {
    }
    explicit gamma_distribution(RealType alpha, RealType beta = 1.0);
    explicit gamma_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const gamma_distribution& x, const gamma_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType alpha() const;
    RealType beta() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const gamma_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    gamma_distribution& x);
  };
}

Шаблон класса std::weibull_distribution

namespace std {
  template<class RealType = double>
  class weibull_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    weibull_distribution()
      : weibull_distribution(1.0)
    {
    }
    explicit weibull_distribution(RealType a, RealType b = 1.0);
    explicit weibull_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const weibull_distribution& x, const weibull_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const weibull_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    weibull_distribution& x);
  };
}

Шаблон класса std::extreme_value_distribution

namespace std {
  template<class RealType = double>
  class extreme_value_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    extreme_value_distribution()
      : extreme_value_distribution(0.0)
    {
    }
    explicit extreme_value_distribution(RealType a, RealType b = 1.0);
    explicit extreme_value_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const extreme_value_distribution& x,
                           const extreme_value_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const extreme_value_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    extreme_value_distribution& x);
  };
}

Шаблон класса std::normal_distribution

namespace std {
  template<class RealType = double>
  class normal_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    normal_distribution()
      : normal_distribution(0.0)
    {
    }
    explicit normal_distribution(RealType mean, RealType stddev = 1.0);
    explicit normal_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const normal_distribution& x, const normal_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType mean() const;
    RealType stddev() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const normal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    normal_distribution& x);
  };
}

Шаблон класса std::lognormal_distribution

namespace std {
  template<class RealType = double>
  class lognormal_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    lognormal_distribution()
      : lognormal_distribution(0.0)
    {
    }
    explicit lognormal_distribution(RealType m, RealType s = 1.0);
    explicit lognormal_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const lognormal_distribution& x,
                           const lognormal_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType m() const;
    RealType s() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const lognormal_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    lognormal_distribution& x);
  };
}

Шаблон класса std::chi_squared_distribution

namespace std {
  template<class RealType = double>
  class chi_squared_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    chi_squared_distribution()
      : chi_squared_distribution(1.0)
    {
    }
    explicit chi_squared_distribution(RealType n);
    explicit chi_squared_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const chi_squared_distribution& x,
                           const chi_squared_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const chi_squared_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    chi_squared_distribution& x);
  };
}

Шаблон класса std::cauchy_distribution

namespace std {
  template<class RealType = double>
  class cauchy_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    cauchy_distribution()
      : cauchy_distribution(0.0)
    {
    }
    explicit cauchy_distribution(RealType a, RealType b = 1.0);
    explicit cauchy_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const cauchy_distribution& x, const cauchy_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType a() const;
    RealType b() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода-вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const cauchy_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    cauchy_distribution& x);
  };
}

Шаблон класса std::fisher_f_distribution

namespace std {
  template<class RealType = double>
  class fisher_f_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    fisher_f_distribution()
      : fisher_f_distribution(1.0)
    {
    }
    explicit fisher_f_distribution(RealType m, RealType n = 1.0);
    explicit fisher_f_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const fisher_f_distribution& x,
                           const fisher_f_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType m() const;
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const fisher_f_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    fisher_f_distribution& x);
  };
}

Шаблон класса std::student_t_distribution

namespace std {
  template<class RealType = double>
  class student_t_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    student_t_distribution()
      : student_t_distribution(1.0)
    {
    }
    explicit student_t_distribution(RealType n);
    explicit student_t_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const student_t_distribution& x,
                           const student_t_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    RealType n() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const student_t_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    student_t_distribution& x);
  };
}

Шаблон класса std::discrete_distribution

namespace std {
  template<class IntType = int>
  class discrete_distribution
  {
  public:
    // типы
    using result_type = IntType;
    using param_type  = /* не указано */;
    // конструкторы и функции сброса
    discrete_distribution();
    template<class InputIter>
    discrete_distribution(InputIter firstW, InputIter lastW);
    discrete_distribution(initializer_list<double> wl);
    template<class UnaryOperation>
    discrete_distribution(size_t nw, double xmin, double xmax, UnaryOperation fw);
    explicit discrete_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const discrete_distribution& x,
                           const discrete_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    vector<double> probabilities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& os,
                                                    const discrete_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    discrete_distribution& x);
  };
}

Шаблон класса std::piecewise_constant_distribution

namespace std {
  template<class RealType = double>
  class piecewise_constant_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указан */;
    // конструкторы и функции сброса
    piecewise_constant_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_constant_distribution(InputIterB firstB,
                                    InputIterB lastB,
                                    InputIterW firstW);
    template<class UnaryOperation>
    piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_constant_distribution(size_t nw,
                                    RealType xmin,
                                    RealType xmax,
                                    UnaryOperation fw);
    explicit piecewise_constant_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const piecewise_constant_distribution& x,
                           const piecewise_constant_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода/вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_constant_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_constant_distribution& x);
  };
}

Шаблон класса std::piecewise_linear_distribution

namespace std {
  template<class RealType = double>
  class piecewise_linear_distribution
  {
  public:
    // типы
    using result_type = RealType;
    using param_type  = /* не указан */;
    // конструкторы и функции сброса
    piecewise_linear_distribution();
    template<class InputIterB, class InputIterW>
    piecewise_linear_distribution(InputIterB firstB, InputIterB lastB, InputIterW firstW);
    template<class UnaryOperation>
    piecewise_linear_distribution(initializer_list<RealType> bl, UnaryOperation fw);
    template<class UnaryOperation>
    piecewise_linear_distribution(size_t nw,
                                  RealType xmin,
                                  RealType xmax,
                                  UnaryOperation fw);
    explicit piecewise_linear_distribution(const param_type& parm);
    void reset();
    // операторы сравнения
    friend bool operator==(const piecewise_linear_distribution& x,
                           const piecewise_linear_distribution& y);
    // функции генерации
    template<class URBG>
    result_type operator()(URBG& g);
    template<class URBG>
    result_type operator()(URBG& g, const param_type& parm);
    // функции свойств
    vector<result_type> intervals() const;
    vector<result_type> densities() const;
    param_type param() const;
    void param(const param_type& parm);
    result_type min() const;
    result_type max() const;
    // операторы ввода и вывода
    template<class CharT, class Traits>
    friend basic_ostream<CharT, Traits>& operator<<(
      basic_ostream<CharT, Traits>& os,
      const piecewise_linear_distribution& x);
    template<class CharT, class Traits>
    friend basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& is,
                                                    piecewise_linear_distribution& x);
  };
}