std::linear_congruential_engine<UIntType,a,c,m>:: linear_congruential_engine
From cppreference.net
<
cpp
|
numeric
|
random
|
linear congruential engine
|
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
として、エンジンの初期
状態
は以下のように決定される:
- 仮想的な配列オブジェクト a を長さ k + 3 で作成する。
- seq. generate ( a + 0 , a + k + 3 ) を呼び出す。
-
S
を
(∑
k-1
j=0 a j+3 ·2 32j
) mod m とする。 - c % m == 0 と S == 0 の両方が true の場合、エンジンの状態を 1 に設定する。それ以外の場合、エンジンの状態を S に設定する。
4)
コピーコンストラクタ。構築時には、
*
this
==
other
が
true
となります。
目次 |
パラメータ
| value | - | 内部状態の初期化に使用するシード値 |
| seq | - | 内部状態の初期化に使用するシードシーケンス |
計算量
1,2)
定数。
3)
seq.generate
呼び出しの複雑度と同じ。
4)
定数。
例外
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2181 | C++11 |
オーバーロード
(
3
)
は
seq.generate
呼び出しが例外を送出しても例外を送出しなかった
|
例外を伝播させる |
| P0935R0 | C++11 | デフォルトコンストラクタがexplicitだった | 暗黙的(implicit)に変更 |
関連項目
|
エンジンの現在の状態を設定
(公開メンバ関数) |