Namespaces
Variants

C++ named requirements: UniformRandomBitGenerator (since C++11)

From cppreference.net
C++ named requirements

均匀随机位生成器是一种函数对象,它返回无符号整数值,使得可能结果范围内的每个值(理想情况下)具有相等的概率。

均匀随机比特生成器并非设计用作随机数生成器:它们被用作随机比特源(为效率起见批量生成)。任何均匀随机比特生成器都可以接入任意 随机数分布 来获取随机数(形式化称为随机变量)。

目录

要求

类型 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 ( ) ] 内的值。
  • 具有均摊常数复杂度。

满足以下所有条件:

(since C++20)

注释

所有 随机数引擎 均满足此要求。

标准库

以下标准库设施要求使用 UniformRandomBitGenerator 类型。

(until C++17) (C++11)
随机重排范围内的元素
(函数模板)
(C++17)
从序列中选择 N 个随机元素
(函数模板)
在区间 [ 0 , 1 ) 上均匀生成给定精度的实数值
(函数模板)
生成在范围内均匀分布的整数值
(类模板)
生成在范围内均匀分布的实数值
(类模板)
所有其他随机数分布

以下标准库设施满足 UniformRandomBitGenerator 要求,但不同时满足 RandomNumberEngine 要求:

使用硬件熵源的非确定性随机数生成器
(类)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 2154
( P0898R3 )
C++11 未明确说明 G :: min ( ) G :: max ( )
是否需要为常量表达式 [1]
要求必须为常量表达式
  1. 在C++20之前,这些表达式的时间复杂度要求是“编译时”的。该措辞存在歧义,因为“编译时时间复杂度”既可以解释为“可在编译时求值”,也可以解释为“时间复杂度可在编译时确定”。

参见

指定类型符合均匀随机比特生成器的要求
(概念)