40.7 随机数

随机数对很多应用都很重要,如仿真、游戏、基于采样的算法、加密以及测试。例如,我们可能希望为一个路由器仿真程序选择TCP/IP地址、决定一只怪兽是发起攻击还是挠挠头而已以及生成一组值来测试一个平方根函数。在<random>中,标准库定义了生成(伪)随机数的特性。这种随机数是按照数学公式生成的值的序列,而不是无法猜测(“真随机”)的数,后者可以从物理过程中获得,例如放射性衰变或太阳辐射。如果具体实现具备这种真随机设备,会将其表示为一个random_device(见40.7.1节)。

标准库提供了四种随机数相关的实体:

·均匀随机数发生器(uniform random number generator)是一个返回无符号整数值的函数对象,值域中每个可能值(理想情况下)被返回的概率相等。

·随机数引擎(random number engine,简称引擎)是一个均匀随机数发生器,可用默认状态创建——E{},或用一个seed确定的状态创建——E{s}。

·随机数引擎适配器(random number engine adaptor,简称适配器)是一个随机数引擎,它接受某个其他随机数引擎生成的值,并应用算法将这些值转换为另一个具有不同随机特性的值的序列。

·随机数分布(random number distribution,简称分布)是一个函数对象,其返回值的分布服从一个关联的数学概率密度函数p(z)或一个关联的离散概率函数P(zi)。

更多细节请见iso.26.5.1。

符合用户习惯的更简单的描述是,一个随机数发生器就是一个引擎加一个分布。引擎生成一个均匀分布的值的序列,分布再将这些值转换为要求的形状(分布)。即,如果你从随机数发生器接受了大量数值并绘制它们,就会得到一个描绘它们分布的相当平滑的图形。例如,将normal_distribution绑定到default_random_engine会提供给我们一个生成正态分布的随机数发生器: ...

Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.