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 起)

subtract_with_carry_engine 是使用带进位减法算法的随机数引擎。

模板形参

UIntType - 生成器所生成的结果类型。如果它不是 unsigned shortunsigned intunsigned longunsigned long long 之一,那么效果未定义。
w - 状态序列按位计的字大小
s - 短延迟
r - 长延迟

如果 w 不在 [1std::numeric_limits<UIntType>::digits] 中,或者 s 不在 [1r) 中,那么程序非良构。

生成器属性

subtract_with_carry_engine 的状态的大小O(r),它包含以下两个部分:

  • 包含 r 个整数值的序列 X,其中每个值都在 [02w
    ) 中。
  • 整数 c(它被称为进位值),它的值要么是 0,要么是 1

在给定 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++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3809 C++11 default_seed 不一定能以 result_type 表示 将它的类型改为 std::uint_least32_t