命名空间
变体
操作

std::subtract_with_carry_engine

来自 cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
在头文件 <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 shortunsigned intunsigned longunsigned long long 之一,则效果未定义。
w - 状态序列的字大小(以位计)
s - 短滞后
r - 长滞后

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

[编辑] 生成器属性

subtract_with_carry_engine 的状态的 大小O(r),每个状态都包含两个部分:

  • 一个 X 序列,包含 r 个整数值,每个值都在 [02w
    ) 中。
  • 一个整数 c(称为进位 ),其值为 01

假设 X
j
代表 X 的第 j mod r 个值(从 0 开始),那么 subtract_with_carry_engine转移算法 (TA(x
i
)
) 定义如下:

  1. YX
    i-s
    -X
    i-r
    -c
  2. yY mod 2w
    ,并将 X
    i
    设置为 y
  3. 如果 Y 为负数,则将 c 设置为 1,否则将 c 设置为 0

subtract_with_carry_engine生成算法GA(x
i
) = y
,其中 y 是在转移算法的步骤 2 中产生的值。

[编辑] 预定义的专业化

以下专业化定义了具有两个常用的参数集的随机数引擎:

在头文件 <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
(公共静态成员常量)

[编辑] 成员函数

构造和播种
构造引擎
(公共成员函数) [编辑]
(C++11)
设置引擎的当前状态
(公共成员函数) [编辑]
生成
推进引擎的状态并返回生成的数值
(公共成员函数) [编辑]
(C++11)
将引擎的状态推进指定的量
(公共成员函数) [编辑]
特性
[静态] (C++11)
获取输出范围内最小的可能值
(公共静态成员函数) [编辑]
[静态] (C++11)
获取输出范围内最大的可能值
(公共静态成员函数) [编辑]

[编辑] 非成员函数

(C++11)(C++11)(C++20 中已删除)
比较两个伪随机数引擎的内部状态
(函数) [编辑]
对伪随机数引擎执行流输入和输出
(函数模板) [编辑]

[编辑] 示例

[编辑] 缺陷报告

以下更改行为的缺陷报告已追溯应用于之前发布的 C++ 标准。

DR 应用于 发布的行为 正确行为
LWG 3809 C++11 default_seed 可能无法用
result_type 表示
更改其类型为
std::uint_least32_t