C++ 具名要求:均匀随机位生成器(UniformRandomBitGenerator) (C++11 起)
来自cppreference.com
均匀随机位生成器是返回无符号整数值的函数对象,其可能结果范围中的每个值都(理想情况)拥有等概率。
均匀随机位生成器的目的并非用做随机数生成器:它们被用作随机位的源(为效率进行批量生成)。任何均匀随机位生成器均可被插入任何随机数分布,以获得随机数(正式而言是随机变量)。
目录 |
[编辑]要求
类型 G
在满足以下条件的情况下满足均匀随机位生成器(UniformRandomBitGenerator) :
给定类型
| (C++20 前) |
表达式 | 类型 | 要求 |
---|---|---|
G::min() | G::result_type |
|
G::max() | G::result_type |
|
g() | G::result_type |
|
满足以下所有条件:
| (C++20 起) |
[编辑]注解
所有随机数引擎(RandomNumberEngine) 均满足此要求。
[编辑]标准库
下列标准库设施期待均匀随机位生成器(UniformRandomBitGenerator) 类型。
(C++17 前)(C++11) | 随机重排范围中元素 (函数模板) |
(C++17) | 从序列中随机选择 N 个元素 (函数模板) |
(C++11) | 给定精度的在 [ 0, 1) 内均匀分布的实数 (函数模板) |
(C++11) | 产生在范围内均匀分布的整数 (类模板) |
(C++11) | 产生在范围内均匀分布的实数 (类模板) |
所有其他随机数分布 |
下列标准库设施满足均匀随机位生成器(UniformRandomBitGenerator) 而不另外满足随机数引擎(RandomNumberEngine) :
(C++11) | 使用硬件熵源的非确定随机数生成器 (类) |
[编辑]缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2154 (P0898R3) | C++11 | 不明确 G::min() 和 G::max() 是否要求是常量表达式[1] | 要求是常量表达式 |
- ↑在 C++20 前,这两个表达式的时间复杂度要求是“编译期”。这一用词有歧义,因为“编译期时间复杂度”可以被解读为“可以在编译期求值”或“可以在编译期确定时间复杂度”。
[编辑]参阅
(C++20) | 指定类型具备作为均匀随机位生成器的资格 (概念) |