namespace std {
using philox4x32 = philox_engine<uint_fast32_t, 32, 4, 10, 0xD2511F53, 0x9E3779B9, 0xCD9E8D57, 0xBB67AE85>;
}
概要
パラメータ設定済みのphilox_engine
。
32ビット版のPhilox。64ビット版はphilox4x64
。
要件
philox4x32
型オブジェクトをデフォルト構築した場合、10000番目に生成される擬似乱数の値は1955073260
であること。
乱数列の周期
4 * 24 * 32 = 2130
サイズ
32ビット * 10個
シード、および生成される値の型
備考
- ここではラウンド数として
r = 10
を設定している。この値を大きくすれば乱数の品質は向上し、統計的により良い分布になっていく。10
という値は既知の統計検定に合格する最小値よりやや大きめであり、広く使用されている値である。言い換えれば、適度な性能コストで統計的な安全マージンを提供しているr = 7
でも統計的な欠陥は見つかっていないが、実際にはr = 10
だけが広く使われている
例
#include <iostream>
#include <random>
int main()
{
std::random_device seed_gen;
std::philox4x32 engine{seed_gen()};
for (int i = 0; i < 10; ++i) {
std::uint32_t result = engine();
std::cout << result << std::endl;
}
}
出力例
717409690
3816001420
2063273750
279442752
2836561695
431684143
3973522490
2090827657
748889484
859307553
バージョン
言語
- C++26
処理系
- Clang: 19 ❌
- GCC: 14 ❌
- ICC: ??
- Visual C++: ??