std::philox_engine<UIntType,w,n,r,consts>::philox_engine

来自cppreference.com
< cpp‎ | numeric‎ | random‎ | philox engine
 
 
 
 
 
philox_engine() : philox_engine(default_seed) {}
(1) (C++26 起)
explicit philox_engine( result_type value );
(2) (C++26 起)
template< class SeedSeq >
explicit philox_engine( SeedSeq& seq );
(3) (C++26 起)
philox_engine( const philox_engine& other );
(4) (C++26 起)
(隐式声明)

构造伪随机数引擎。

1) 默认构造函数。
  • 如果默认构造的引擎具有 std::philox4x32 类型,那么对它连续调用 10000 次产生的值是 1955073260
  • 如果默认构造的引擎具有 std::philox4x64 类型,那么对它连续调用 10000 次产生的值是 3409172418970261260
2) 以种子值 value 构造引擎。引擎的初始状态通过以下方式确定:[1]
  • 序列 X 的所有元素都被设为零。
  • 序列 K 的首元素被设为 value mod 2w
    ,其他元素都被设为零。
  • j 的值被设为 n - 1
3) 以种子序列 seq 构造引擎。引擎的初始状态通过以下方式确定:[1]
  • 序列 X 的所有元素都被设为零。
  • 给定 (w - 1) / 32 + 1p,通过以下步骤设置序列 K 的值。
  1. 创建一个长度是 k + 3 的虚设数组对象。
  2. 调用 seq.generate(a + 0, a + k + 3)
  3. 对于 [0n / 2) 中的每个整数 k,将 K
    k
    设为 (∑p-1
    i=0
    a
    k·p+i
    ·232i
    ) mod 2w
  • j 的值被设为 n - 1
此重载只有在 SeedSeq 满足种子序列 (SeedSequence) 的要求时才会参与重载决议。
4) 复制构造函数。构造完成时 *this == othertrue


  1. 1.0 1.1 不设置缓冲区 Y 是有意的。因为 j 会被设为 n - 1,所以下一次状态变换必然会生成新的随机值,并将它们存储到 Y 中。

参数

value - 用于内部状态初始化的种子值
seq - 用于内部状态初始化的种子序列

复杂度

1,2) 常数。
3)seq.generate 调用的复杂度相同。
4) 常数。

参阅

(C++26)
设置引擎的当前状态
(公开成员函数)
设置引擎的当前计数器
(公开成员函数)