Namespaces
Variants

std::linear_congruential_engine<UIntType,a,c,m>:: linear_congruential_engine

From cppreference.net
linear_congruential_engine ( ) : linear_congruential_engine ( default_seed ) { }
(1) (C++11以降)
explicit linear_congruential_engine ( result_type value ) ;
(2) (C++11以降)
template < class SeedSeq >
explicit linear_congruential_engine ( SeedSeq & seq ) ;
(3) (C++11以降)
linear_congruential_engine ( const linear_congruential_engine & other ) ;
(4) (C++11以降)
(暗黙的に宣言)

擬似乱数生成エンジンを構築します。

1) デフォルトコンストラクタ。
  • デフォルト構築されたエンジンが型 std::minstd_rand0 の場合、その連続10000回目の呼び出しは値 1043618065 を生成する。
  • デフォルト構築されたエンジンが型 std::minstd_rand の場合、その連続10000回目の呼び出しは値 399268537 を生成する。
2) シード値 value でエンジンを構築する。エンジンの初期 状態 は以下のように決定される:
  • c % m == 0 かつ value % m == 0 がともに true の場合、状態は 1 となる。
  • それ以外の場合、状態は value % m となる。
3) シードシーケンス seq を用いてエンジンを構築する。 std:: size_t ( std:: log2 ( m ) / 32 ) + 1 k として、エンジンの初期 状態 は以下のように決定される:
  1. 仮想的な配列オブジェクト a を長さ k + 3 で作成する。
  2. seq. generate ( a + 0 , a + k + 3 ) を呼び出す。
  3. S (∑ k-1
    j=0
    a j+3 ·2 32j
    ) mod m
    とする。
  4. c % m == 0 S == 0 の両方が true の場合、エンジンの状態を 1 に設定する。それ以外の場合、エンジンの状態を S に設定する。
このオーバーロードは、 SeedSeq SeedSequence の要件を満たす場合にのみ、オーバーロード解決に参加します。
4) コピーコンストラクタ。構築時には、 * this == other true となります。

目次

パラメータ

value - 内部状態の初期化に使用するシード値
seq - 内部状態の初期化に使用するシードシーケンス

計算量

1,2) 定数。
3) seq.generate 呼び出しの複雑度と同じ。
4) 定数。

例外

3) SeedSeq std::seed_seq でない場合、 seq.generate 呼び出しによってスローされる例外をスローする。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2181 C++11 オーバーロード ( 3 ) seq.generate 呼び出しが例外を送出しても例外を送出しなかった 例外を伝播させる
P0935R0 C++11 デフォルトコンストラクタがexplicitだった 暗黙的(implicit)に変更

関連項目

エンジンの現在の状態を設定
(公開メンバ関数)