std:: philox_engine
| 
           定义于头文件
            
            
             <random>
            
            | ||
| 
           
            
             template
            
            
             <
            
             
             
              class
             
             UIntType,
             
              
               std::
               
                size_t
               
              
             
             w,
             
              
               std::
               
                size_t
               
              
             
             n,
             
              
               std::
               
                size_t
               
              
             
             r,
              | (C++26 起) | |
       
        std::philox_engine
       
       是一种基于计数器的随机数生成引擎。
      
| 目录 | 
模板参数
| UIntType | - | 生成器产生的结果类型。若该类型不是 unsigned short 、 unsigned int 、 unsigned long 或 unsigned long long 之一,则行为未定义。 | 
| w | - | 字长(以比特为单位) | 
| n | - | 字数 | 
| r | - | 轮次计数 | 
| consts | - | 用于生成随机数的乘数及轮常量序列 | 
如果以下任一值不为 true ,则程序格式错误:
- sizeof... ( consts ) == n
- n == 2 || n == 4
- 0 < r
- 0 < w && w <= std:: numeric_limits < UIntType > :: digits
生成器属性
在以下描述中,令 Q i 表示序列 Q 的第 i 个元素,其中下标从零开始。
       
        philox_engine
       
       的
       
        状态
       
       大小为
       
       
        O(n)
       
       ,每个状态由四部分组成:
      
- 
        一个由
        
         
          n
         
        
        个整数值构成的序列
        
         
          X
         
        
        ,其中每个值的取值范围为
        
         [ 0 ,2w
 )。
- 
        - 
          该序列表示一个大型无符号整数计数器值
          
          
           Z=∑
           
            n-1
            
 j=0 X⋅2 wj
 ,位宽为 n⋅w 位。
 
- 
          该序列表示一个大型无符号整数计数器值
          
          
           Z=∑
           
            n-1
            
- 
        一个由
        
         
          n
          
           /
          
          
           2
          
         
        
        个
        UIntType类型密钥组成的序列 K 。
- 
        一个包含
        
         
          n
         
        
        个
        UIntType类型生成值的缓冲区 Y 。
- Y 缓冲区中的索引 j 。
       
        philox_engine
       
       的
       
        状态转移算法
       
       (
       
       
        TA(X
        
         i
        
        )
       
       )定义如下:
      
- 生成一个包含 n 个随机值的新序列(详见下文),并将其存储在 Y 中。
- 将计数器 Z 的值增加 1 。
- 将 j 重置为  0  。
       
        philox_engine
       
       的
       
        生成算法
       
       为
       
       
        GA(X
        
         i
        
        )=Y
        
         j
        
       
       。
      
生成随机值
随机值根据以下参数生成:
- 轮数 r
- 当前计数器序列 X
- 密钥序列 K
- 乘数序列 M
- 轮常量序列 C
       序列
       
        
         M
        
       
       和
       
        
         C
        
       
       由模板参数包
       
        
         consts
        
       
       中的值构成,这些值以
       
        [
       
       
       
        M
        
         0
        
       
       
        ,
       
       
       
       
       
        C
        
         0
        
       
       
        ,
       
       
       
       
       
        M
        
         1
        
       
       
        ,
       
       
       
       
       
        C
        
         1
        
       
       
        ,... , ...,
       
       
       
       
       
        M
        
         n/2-1
        
       
       
        ,
       
       
       
       
       
        C
        
         n/2-1
        
       
       
        ]
       
       的形式分别表示常量
       
       
        M
        
         k
        
       
       和
       
       
        C
        
         k
        
       
       。
      
随机数通过以下过程生成:
- 将输出序列 S 初始化为 X 的元素。
- 对 S 的元素进行 r 轮更新。
- 将缓冲区 Y 中的值替换为 S 中的值。
更新输出序列
在每一轮更新中,会按照指定顺序使用 S 的元素初始化一个中间序列 V :
| n | V 0 | V 1 | V 2 | V 3 | 
|---|---|---|---|---|
| 2 | S 0 | S 1 | 不适用 | |
| 4 | S 2 | S 1 | S 0 | S 3 | 
给定以下操作符号:
- xor ,内置的 按位异或 运算符。
- 
        
        
         mullo
        
        ,计算模乘法的低半部分,定义为
        
        
         mullo(a,b,w)=(a⋅b) mod 2
         
          w
          
 。
- 
        
        
         mulhi
        
        ,计算乘法的高半部分,定义为
        
        
         mulhi(a,b,w)=⌊(a⋅b)/2
         
          w
          
 ⌋ 。
       设
       
        
         q
        
       
       为当前轮次编号(从零开始),对于每个在区间
       
        
         [
        
        
         
          
          
           0
          
          
         
        
        
         ,
        
        
         
          n
          
           /
          
          
           2
          
         
        
        
         )
        
       
       内的整数
       
        
         k
        
       
       ,输出序列
       
        
         S
        
       
       的元素按以下方式更新:
      
- 
        
        
         X
         
          2⋅k
         
         =mulhi(V
         
          2⋅k
         
         ,M
         
          k
         
         ,w) xor ((K
         
          k
         
         +q⋅C
         
          k
         
         ) mod 2
         
          w
          
 ) xor V 2⋅k+1
- X 2⋅k+1 =mullo(V 2⋅k ,M k ,w)
预定义特化
以下特化定义了随机数引擎,包含两种常用参数集:
| 
          定义于头文件
           
           
            <random>
           
           | |
| 类型 | 定义 | 
| 
          philox4x32
         (C++26) | std
          
           ::
          
          
           philox_engine
          
          
           <
          
          
           
            std::
            
             uint_fast32_t
            
           
          
          ,
          
           32
          
          ,
          
           4
          
          ,
          
           10
          
          , 
         0xCD9E8D57
          
          ,
          
           0x9E3779B9
          
          ,
         0xD2511F53
          
          ,
          
           0xBB67AE85
          
          
           > | 
| 
          philox4x64
         (C++26) | std
          
           ::
          
          
           philox_engine
          
          
           <
          
          
           
            std::
            
             uint_fast64_t
            
           
          
          ,
          
           64
          
          ,
          
           4
          
          ,
          
           10
          
          , 
         0xCA5A826395121157
          
          ,
          
           0x9E3779B97F4A7C15
          
          ,
         0xD2E7470EE14C6C93
          
          ,
          
           0xBB67AE8584CAA73B
          
          
           > | 
嵌套类型
| 类型 | 定义 | 
| 
          result_type
          | 
          UIntType
          | 
数据成员
| 
           
            
             
              constexpr
              
               
                std::size_t
               
              
             
             word_size
            
           
           
           
            
             
              [static]
             
            
           
           | w (公开静态成员常量) | 
| 
           
            
             
              constexpr
              
               
                std::size_t
               
              
             
             word_count
            
           
           
           
            
             
              [static]
             
            
           
           | n (公开静态成员常量) | 
| 
           
            
             
              constexpr
              
               
                std::size_t
               
              
             
             round_count
            
           
           
           
            
             
              [static]
             
            
           
           | r (公开静态成员常量) | 
| 
           
            
             
              constexpr
              
               
                
                 std::
                 
                  array
                 
                
               
               
                <
               
               result_type, word_count
               
                /
               
               
                2
               
               
                >
               
              
             
             multipliers
            
           
           
           
            
             
              [static]
             
            
           
           | 乘数序列
         
         
          
           M (公开静态成员常量) | 
| 
           
            
             
              constexpr
              
               
                
                 std::
                 
                  array
                 
                
               
               
                <
               
               result_type, word_count
               
                /
               
               
                2
               
               
                >
               
              
             
             round_consts
            
           
           
           
            
             
              [static]
             
            
           
           | 轮常量序列
         
         
          
           C (公开静态成员常量) | 
| 
           
            
             
              constexpr
              
               
                std::uint_least32_t
               
              
             
             default_seed
            
           
           
           
            
             
              [static]
             
            
           
           | 20111115u (公开静态成员常量) | 
成员函数
| 构造与播种 | |
| 构造引擎 (公开成员函数) | |
| 设置引擎的当前状态 (公开成员函数) | |
| 设置引擎的当前计数器 (公开成员函数) | |
| 生成 | |
| 推进引擎状态并返回生成的值 (公开成员函数) | |
| 按指定量推进引擎状态 (公开成员函数) | |
| 特性 | |
| 
           
            
             
              [static]
             
            
           
           | 获取输出范围中的最小可能值 (公开静态成员函数) | 
| 
           
            
             
              [static]
             
            
           
           | 获取输出范围中的最大可能值 (公开静态成员函数) | 
非成员函数
| 
           
            
             
              (C++26)
             
            
           
           | 比较两个伪随机数引擎的内部状态 (函数) | 
| 
           
            
             
              (C++26)
             
            
           
           | 对伪随机数引擎执行流输入和输出操作 (函数模板) | 
注释
| 功能测试 宏 | 值 | 标准 | 功能 | 
|---|---|---|---|
| 
           __cpp_lib_philox_engine
           | 
           202406L
           | (C++26) | 
          std::philox_engine
          | 
示例
| 本节内容不完整 原因:缺少示例 |