std::subtract_with_carry_engine
来自 cppreference.com
在头文件 <random> 中定义 |
||
template< class UIntType, |
(自 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),每个状态都包含两个部分:
- 一个 X 序列,包含 r 个整数值,每个值都在
[
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++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 3809 | C++11 | default_seed 可能无法用result_type 表示 |
更改其类型为 std::uint_least32_t |