次の方法で共有


independent_bits_engine クラス

ベースとなるエンジンから返される値からビットを再パックして、指定したビット数のランダム シーケンスを生成します。

template<class Engine,
    size_t W, class UIntType>
    class independent_bits_engine {
public:
    typedef Engine base_type;
    typedef typename base_type::result_type result_type;
    independent_bits_engine();
    explicit independent_bits_engine(const base_type& eng);
    explicit independent_bits_engine(result_type x0);
    explicit independent_bits_engine(seed_seq& seq);
    void seed();
    void seed(result_type x0);
    void seed(seed_seq& seq);
    const base_type& base() const;
    static const result_type min();
    static const result_type max();
    result_type operator()();
    void discard(unsigned long long count);
private:
    Engine stored_eng;
    int count;
    };

パラメーター

  • Engine
    格納されているエンジンの型。

  • W
    W エンジン パラメーター。

  • UIntType
    結果を表す符号なし整数型。

解説

このテンプレート クラスは、ベースとなるエンジンから返された値のビットを再パックすることによって値を生成する<random>を表します。結果の W ビット値は、次のように結合された N 個のフィールドで構成されます。

  • 先頭の N0 個のフィールドは、ベースとなるエンジンから返された値の下位 W0 個のビットであり、Y0 より小さく、重要度に応じて降順にパックされます。大きすぎる値は破棄されます。

  • 残りの N - N0 個のフィールドは、ベースとなるエンジンから返された値の下位 W0 + 1 個のビットであり、Y1 より小さく、重要度に応じて降順にパックされます。大きすぎる値は破棄されます。

パラメーター (W 以外) は、次のように決定されます。

  • R は、ベースとなるエンジンによって返される値の全範囲です (stored_eng.max() - stored_eng.min() + 1。折り返しが発生しないことを前提とします)。

  • M が floor(log2(R)) です。

  • N の初期値は W / M + (W % M != 0) です。

  • W0 が W / N です。

  • N0 が N - W % N です。

  • Y0 が (R >> W0) << W0 です。

  • Y1 が (R >> W0 + 1) << W0 + 1 です。

  • Y0 / N < R - Y0 の場合、N がインクリメントされ、前の 4 つのパラメーターが再度決定されます。

エンジンの状態は、stored_eng の状態です。テンプレート引数 W の値は、0 より大きく、result_type で表現できるビット数を超えない値にする必要があります。

必要条件

ヘッダー : <random>

名前空間: std

参照

関連項目

<random>

independent_bits_engine::base

independent_bits_engine::base_type

independent_bits_engine::discard

independent_bits_engine::independent_bits_engine

independent_bits_engine::operator()

independent_bits_engine::seed