Namespaces
Variants

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

From cppreference.net
Standard library headers

このヘッダは 擬似乱数生成 ライブラリの一部です。

目次

Includes

std::initializer_list クラステンプレート

Concepts

一様乱数ビット生成器の要件
型が一様乱数ビット生成器として適格であることを指定する
(concept)

クラス

乱数生成エンジン
線形合同法 を実装する
(クラステンプレート)
Mersenne twister アルゴリズムを実装する
(クラステンプレート)
減算付きキャリー( ラグ付きフィボナッチ )アルゴリズムを実装する
(クラステンプレート)
カウントベースの並列化可能なジェネレータ
(クラステンプレート)
乱数エンジンアダプタ
乱数エンジンの出力の一部を破棄する
(クラステンプレート)
乱数エンジンの出力を指定されたビット数のブロックにパックする
(クラステンプレート)
乱数エンジンの出力を異なる順序で提供する
(クラステンプレート)
**翻訳結果:** - `ranlux48_base` - C++のクラス名なので翻訳せず - `(C++11)` - バージョン情報なので翻訳せず - `std::subtract_with_carry_engine` - C++のテンプレートクラス名なので翻訳せず - `std::uint_fast64_t` - C++の型名なので翻訳せず - 数値パラメータ(48, 5, 12)はそのまま保持 HTMLタグ、属性、コードブロック内のテキストはすべて元のまま保持されています。 HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しています。
事前定義済みジェネレータ
minstd_rand0 (C++11) std:: linear_congruential_engine < std:: uint_fast32_t ,
16807 , 0 , 2147483647 >

1969年にLewis、Goodman、Millerによって発見され、1988年にParkとMillerによって「最小標準」として採用されました

minstd_rand (C++11)

std:: linear_congruential_engine < std:: uint_fast32_t ,
48271 , 0 , 2147483647 >
新しい「最小標準」、1993年にPark、Miller、Stockmeyerによって推奨された

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 値を ベルヌーイ分布 に基づいて生成する
(クラス)
二項分布に従う整数値を生成する binomial distribution
(クラステンプレート)
負の二項分布に従う整数値を生成する 負の二項分布
(クラステンプレート)
幾何分布に従う整数値を生成する geometric distribution
(クラステンプレート)
ポアソン分布
ポアソン分布 に従う整数値を生成する
(クラステンプレート)
指数分布に従う実数値を生成する exponential distribution
(クラステンプレート)
ガンマ分布 に従う実数値を生成する
(クラステンプレート)
Weibull分布 に従う実数値を生成する
(クラステンプレート)
極値分布に従う実数値を生成する extreme value distribution
(クラステンプレート)
正規分布
実数値を 標準正規分布(ガウス分布) に従って生成する
(クラステンプレート)
対数正規分布に従う実数値を生成する lognormal distribution
(クラステンプレート)
実数値を生成する カイ二乗分布
(クラステンプレート)
Cauchy分布 に従う実数値を生成する
(クラステンプレート)
実数値を生成する フィッシャーのF分布
(クラステンプレート)
Studentのt分布 に従う実数値を生成する
(クラステンプレート)
標本分布
離散分布で整数値を生成する
(クラステンプレート)
定数部分区間上に分布する実数値を生成する
(クラステンプレート)
定義された部分区間上に分布する実数値を生成する
(クラステンプレート)
ユーティリティ
(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            = /* 詳細は説明を参照 */;          // フリースタンディング
  using ranlux24_base         = /* 説明を参照 */;          // フリースタンディング
  using ranlux48_base         = /* 説明を参照 */;          // フリースタンディング
  using ranlux24              = /* 詳細は説明を参照 */;          // フリースタンディング
  using ranlux48              = /* 説明を参照 */;          // freestanding
  using knuth_b               = /* 説明を参照 */;
  using philox4x32            = /* 説明を参照 */;          // freestanding
  using philox4x64            = /* 説明を参照 */;          // freestanding
  using default_random_engine = /* 詳細は説明を参照 */;
  // class random_device
  class random_device;
  // class 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;
  // ベルヌーイ分布クラス
  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, @exposition onlyid { 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  = /* 未指定 */;
    // コンストラクタとリセット関数
    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);
  };
}