均匀随机位生成器是一种函数对象,它返回无符号整数值,使得可能结果范围内的每个值(理想情况下)具有相等的概率。
均匀随机比特生成器并非设计用作随机数生成器:它们被用作随机比特源(为效率起见批量生成)。任何均匀随机比特生成器都可以接入任意
随机数分布
来获取随机数(形式化称为随机变量)。
|
目录
要求
类型
G
满足
UniformRandomBitGenerator
若
|
给定
g
,一个类型为
G
的值,需满足以下所有条件:
-
G::result_type
必须有效,且表示一个无符号整数类型。
-
下列表达式必须有效并具有其指定效果:
|
(until C++20)
|
|
表达式
|
类型
|
要求
|
|
G
::
min
(
)
|
G::result_type
|
-
返回
G
的
operator
(
)
可能返回的最小值。
-
结果值严格小于
G
::
max
(
)
。
-
该表达式必须是常量表达式。
|
|
G
::
max
(
)
|
G::result_type
|
-
返回
G
的
operator
(
)
可能返回的最大值。
-
结果值严格大于
G::min()
。
-
该表达式必须是常量表达式。
|
|
g
(
)
|
G::result_type
|
-
返回闭区间
[
G
::
min
(
)
,
G
::
max
(
)
]
内的值。
-
具有均摊常数复杂度。
|
注释
所有
随机数引擎
均满足此要求。
标准库
以下标准库设施要求UniformRandomBitGenerator类型。
|
|
随机重排范围中的元素 (函数模板 &算法函数对象)
|
|
|
|
|
|
从序列中选取 N 个随机元素 (函数模板 &算法函数对象)
|
|
|
|
|
|
均匀分布给定精度的实数值跨越[0, 1) (函数模板)
|
|
|
产生均匀分布在范围上的整数值 (类模板)
|
|
|
产生均匀分布在范围上的实数值 (类模板)
|
| 所有其他随机数分布
|
以下标准库设施满足UniformRandomBitGenerator但此外不满足RandomNumberEngine:
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
|
缺陷报告
|
应用于
|
发布时的行为
|
正确行为
|
LWG 2154
(
P0898R3
)
|
C++11
|
未明确说明
G
::
min
(
)
和
G
::
max
(
)
是否需要为常量表达式
[1]
|
要求必须为常量表达式
|
-
↑
在C++20之前,这些表达式的时间复杂度要求是“编译时”的。该措辞存在歧义,因为“编译时时间复杂度”既可以解释为“可在编译时求值”,也可以解释为“时间复杂度可在编译时确定”。
参见
|