function
std::philox_engine::コンストラクタ(C++26)
philox_engine(); // (1) C++26
explicit philox_engine(result_type value); // (2) C++26
template<class Sseq>
explicit philox_engine(Sseq& q); // (3) C++26
philox_engine(const philox_engine& e) = default; // (4) C++26
philox_engine(philox_engine&& e) = default; // (5) C++26
概要
- (1) : デフォルトコンストラクタ
- (2) : シード値を受け取って状態シーケンスを構築する
- (3) : シードのシーケンスを受け取って状態を構築する
- (4) : コピーコンストラクタ。状態をコピーする
- (5) : ムーブコンストラクタ
効果
- (1) : デフォルトのシード値 (
default_seed
) で(2)に委譲
- (2) :
- $K_{0}$ に $ value\ mod\ 2^{w} $ を設定する
- $K_{0}$ 以外の $X$ と $K$ のすべての要素に値0を設定する
- $i$ に値としてn-1を設定する
- (3) :
p = ceil(w / 32)
、長さn / 2 * p
の配列a
があるとして、q.generate(a + 0, a + n / 2 * p)
を呼び出す
- $K$ の各要素k=0, …, n/2-1に、 $ \left(\sum_{j=0}^{p-1}a_{k \cdot p+j} \cdot 2^{32j}\right)\ mod\ 2^{w} $ を設定する
- $X$ のすべての要素に値0を設定する
- $i$ に値としてn-1を設定する
- (1), (2), (3) : 状態のサイズ
n
に対し O(n)
- (5) : 状態シーケンスの要素数はコンパイル時に決定されるため、多くの場合状態シーケンスはスタック上(配列)に作られる。そのため、ムーブが効果的に動作することは期待できない
例
出力例
349899751
1721219710
1841229489
バージョン
言語
処理系