栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数

1. 场景: rand 生成随机数

此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值( 至少为 32767) 之间。

1.1 问题:

  • 一些应用需要随机浮点数。
  • 一些程序需要非均匀分布的数。

2. 解决方法:随机数库

随机数库的组成

  • 随机数引擎类( random-number engines)
    生成随机 unsigned 整数序列
  • 随机数分布类(random-number distribution)
    使用引擎返回服从特定概率分布的随机数

2.1 随机数引擎和分布

随机数引擎是函数对象类, 它们定义了一个调用运算符,该运算符不接受参数并返回一个随机 unsigned 整数。 我们可以通过调用一个随机数引擎对象来生成原始随机数

default_random_engine e; // 生成随机无符号数
for (size_ti = 0;i < 10; ++i)
	//e(T)"调用"对象来生成下一个随机数
	cout << e() <<" ";

输出:

16807 282475249 1622650073 984943658 1144108930 470211272…

2.2 随机数引擎操作

操作解释
Engine e;默认构造函数;使用该引擎类型默认的种子
Engine e(s);使用整型值s作为种子
e.seed(s)使用种子s重置引擎的状态
e.min(),e.max()此引擎可生成的最小值和最大值
Engine::result_type此引擎生成的unsigned整型类型
e.discard(u)将引擎推进u步;u的类型为unsigned long long

2.3 分布类型和引擎

随机数发生器时, 是指分布对象和引擎对象的组合。

eg.为了得到在一个指定范围内的数, 我们使用一个分布类型的对象

// 初始化分布类型
// 生成0到 9 之间(包含)均匀分布的随机数
uniform_int_distribution u(0, 9);
// 初始化引擎
default_random_engine e;
// 随机生成0-9的无符号整数
cout << u(e) << endl;

输出

0 1 7 4 5 2 0 6 6 9

2.3.1 设置随机数发生器种子

种子就是一个数值,引擎可以利用它从序列中一个新位置重新开始生成随机数。

  • 种子可以使用系统函数time(0)。
  • 其他随机数分布

2.3.2 分布类型的操作

操作解释
Dist d;默认够赞函数;使d准备好被使用。其他构造函数依赖于Dist的类型;分布类型的构造函数是explicit的。
d(e)用相同的e连续调用d的话,会根据d的分布式类型生成一个随机数序列;e是一个随机数引擎对象。
d.min(),d.max()返回d(e)能生成的最小值和最大值。
d.reset()重建d的状态,是的随后对d的使用不依赖于d已经生成的值。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号