- random[meta header]
- std[meta namespace]
- type-alias[meta id-type]
- cpp26[meta cpp]
namespace std {
using philox4x32 = philox_engine<uint_fast32_t, 32, 4, 10, 0xD2511F53, 0x9E3779B9, 0xCD9E8D57, 0xBB67AE85>;
}- philox_engine[link philox_engine.md]
- uint_fast32_t[link /reference/cstdint/uint_fast32_t.md]
パラメータ設定済みの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>
#include <cstdint>
int main()
{
std::random_device seed_gen;
std::uint32_t seed = seed_gen();
std::philox4x32 engine{seed};
for (int i = 0; i < 10; ++i) {
std::uint32_t result = engine();
std::cout << result << std::endl;
}
}- std::philox4x32[color ff0000]
- engine()[link philox_engine/op_call.md]
717409690
3816001420
2063273750
279442752
2836561695
431684143
3973522490
2090827657
748889484
859307553
- C++26
- Clang: 19 [mark noimpl]
- GCC: 14 [mark noimpl]
- ICC: ??
- Visual C++: ??