std::subtract_with_carry_engine
来自cppreference.com
在标头 <random> 定义
|
||
template< class UIntType, |
(C++11 起) | |
subtract_with_carry_engine
是使用带进位减法算法的随机数引擎。
模板形参
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))定义如下:
- 设 Y 为 X
i-s-X
i-r-c。 - 设 y 为 Y mod 2w
,并且将 X
i 设置为 y。 - 如果 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++11)(C++11)(C++20 中移除) |
比较两个伪随机数引擎的内部状态 (函数) |
(C++11) |
执行伪随机数引擎的流输入和输出 (函数模板) |
示例
本节未完成 原因:暂无示例 |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3809 | C++11 | default_seed 不一定能以 result_type 表示
|
将它的类型改为 std::uint_least32_t |