std:: subtract_with_carry_engine
|
定义于头文件
<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)
,每个状态由两部分组成:
-
一个包含
r
个整数值的序列
X
,其中每个值的取值范围为
[ 0 ,2w
)。 - 一个整数 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 2
w
,并将 X i 设为 y 。 - 若 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++11)
|
对伪随机数引擎执行流输入和输出操作
(函数模板) |
示例
|
本节内容不完整
原因:缺少示例 |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 应用于 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3809 | C++11 |
default_seed
可能无法
用
result_type
表示
|
将其类型更改为
std::uint_least32_t |