Namespaces
Variants

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

From cppreference.net
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 2 w
    ,其余元素设为零。
  • j 的值设为 n - 1
3) 使用种子序列 seq 构造引擎。引擎的初始 状态 按以下方式确定: [1]
  • 序列 X 的所有元素被设为零。
  • 给定 ( w - 1 ) / 32 + 1 p ,序列 K 的元素通过以下步骤设置:
  1. 创建一个长度为 n / 2 * p 的虚构数组对象 a
  2. 调用 seq. generate ( a + 0 , a + n / 2 * p )
  3. 对于每个在 [ 0 , n / 2 ) 范围内的整数 k ,将 K k 设为 (∑ p-1
    i=0
    a k·p+i ·2 32i
    ) mod 2 w
  • j 的值被设为 n - 1
仅当 SeedSeq 满足 SeedSequence 要求时,此重载才会参与重载决议。
4) 复制构造函数。构造完成后, * this == other true


  1. 1.0 1.1 缓冲区 Y 被有意设置为不更新。由于 j 被设置为 n - 1 ,下一次状态转换总是会生成新的随机值并将其存储到 Y 中。

目录

参数

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

复杂度

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

异常

3) 如果 SeedSeq 不是 std::seed_seq ,则抛出 seq.generate 调用所抛出的异常。

参见

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