Namespaces
Variants

std:: subtract_with_carry_engine

From cppreference.net
定义于头文件 <random>
template <

class UIntType,
std:: size_t w, std:: size_t s, std:: size_t r

> class subtract_with_carry_engine ;
(C++11 起)

是一种使用 带借位减法 算法的随机数引擎。

目录

模板参数

UIntType - 生成器产生的结果类型。若该类型不是 unsigned short unsigned int unsigned long unsigned long long 之一,则行为未定义。
w - 状态序列的字长(以比特为单位)
s - 短滞后量
r - 长滞后量

如果 w 不在 [ 1 , std:: numeric_limits < UIntType > :: digits ] 范围内,或 s 不在 [ 1 , r ) 范围内,则程序格式错误。

生成器属性

subtract_with_carry_engine 的状态空间大小为 O(r) ,每个状态由两部分组成:

  • 一个包含 r 个整数值的序列 X ,其中每个值的取值范围为 [ 0 , 2 w
    )
  • 一个整数 c (称为 进位 ),其取值为 0 1

已知 X j 表示 X 的第 j mod r 个值(从0开始计数),则 subtract_with_carry_engine 状态转移算法 TA(x i ) )定义如下:

  1. Y X i-s -X i-r -c
  2. y Y mod 2 w
    ,并将 X i 设为 y
  3. Y 为负值,将 c 设为 1 ;否则将 c 设为 0

subtract_with_carry_engine 生成算法 GA(x i ) = y ,其中 y 是状态转移算法第二步所产生的值。

预定义特化

以下特化定义了随机数引擎,包含两种常用参数集:

定义于头文件 <random>
类型 定义
ranlux24_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >

嵌套类型

类型 定义
result_type UIntType

数据成员

constexpr std::size_t word_size
[静态]
w
(公开静态成员常量)
constexpr std::size_t short_lag
[静态]
s
(公开静态成员常量)
constexpr std::size_t long_lag
[静态]
r
(公开静态成员常量)
constexpr std::uint_least32_t default_seed
[静态]
19780503u
(公开静态成员常量)

成员函数

构造与播种
构造引擎
(公开成员函数)
设置引擎的当前状态
(公开成员函数)
生成
推进引擎状态并返回生成的值
(公开成员函数)
按指定量推进引擎状态
(公开成员函数)
特性
[static]
获取输出范围中的最小可能值
(公开静态成员函数)
[static]
获取输出范围中的最大可能值
(公开静态成员函数)

非成员函数

(C++11) (C++11) (removed in C++20)
比较两个伪随机数引擎的内部状态
(函数)
对伪随机数引擎执行流输入和输出操作
(函数模板)

示例

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

缺陷报告 应用于 发布时行为 正确行为
LWG 3809 C++11 default_seed 可能无法
result_type 表示
将其类型更改为
std::uint_least32_t