C++11随机数库
random随机数库
C++11引入了新的随机数生成机制,那就是<random>随机数库,支持多种伪随机数生成算法,多种连续和离散随机数分布算法,以及封装了真正的随机数生成引擎random_device。对于写随机数相关的程序来说实在是太香了。
随机数生成引擎和随机数分布引擎
- 随机数生成引擎(Generator):用于生成标准分布的随机数序列
- 随机数分布引擎(Distribution):对随机数生成引擎生成的随机数进行处理,使得最终输出的随机数满足特定的分布
伪随机数生成引擎比较
一般情况就用标准库定义的std::default_random_engine就行,在各个实现中会自己决定std::default_random_engine具体是哪种随机数生成引擎。
| 随机数生成引擎 | 计算公式 | 说明 |
|---|---|---|
| std::minstd_rand | x = x * 48271 % 2147483647 | 线性同余序列,简单,随机性比较差 |
| std::minstd_rand0 | x = x * 16807 % 2147483647 | 线性同余序列,简单,随机性比较差 |
| std::mt19937 | 我不知道 | 梅森旋转算法,随机序列周期长,处理相对耗时 |
| std::mt19937_64 | 我不知道 | 同上,只是保证返回值有64位 |
| std::ranlux24 | 我不知道 | 带进位减法引擎,是对线性同余算法的改进 |
| std::ranlux48 | 我不知道 | 同上 |
| std::knuth_b | 我不知道 | 包装一下线性同余引擎,将其生成的序列打乱输出 |
真正的随机数random_device
真随机数生成器(但有些编译器没有实现),一般可以用于生成伪随机数生成器的种子。在Linux的实现中,是读取/dev/urandom设备,因为生成真随机数需要消耗熵池里的资源,如果熵池空了,请求生成随机数的行为就会被阻塞,要等到收集足够多的环境噪声后才能继续产生真随机数(但从关于 /dev/urandom 的流言终结这篇文章中指出,Linux读取/dev/urandom设备是不会阻塞的,并且也可以当作是真随机数)。
若平台不支持random_device则entropy接口返回0。
C++11随机数库的更多相关文章
- C++11随机数发生器
前言 一直知道所谓的"随机数"都是伪随机,事实上也是满足某种规则生成的.有些程序测试时通常需要一个随机数源,但在新标准出现之前,C++都是依赖简单的C库函数rand来生成随机数的. ...
- C++11随机数的正确打开方式
C++11随机数的正确打开方式 在C++11之前,现有的随机数函数都存在一个问题:在利用循环多次获取随机数时,如果程序运行过快或者使用了多线程等方法,srand((unsigned)time(null ...
- 漫谈C++11 Thread库之原子操作
我在之前一篇博文<漫谈C++11 Thread库之使写多线程程序>中,着重介绍了<thread>头文件中的std::thread类以及其上的一些基本操作,至此我们动手写多线程程 ...
- C++11 标准库也有坑(time-chrono)
恰巧今天调试程序遇到时间戳问题, 于是又搜了搜关于取时间戳,以及时间戳转字符串的问题, 因为 time() 只能取到秒(win和linux) 想试试看能不能找到 至少可以取到毫秒的, 于是, 就找 ...
- boost高质量随机数库 zhuan
shared_ptr<int> tmp2(new int(10)) ; int * test=tmp2.get(); std::cout<<*test<<" ...
- [转]C++11 随机数学习
相对于C++ 11之前的随机数生成器来说,C++11的随机数生成器是复杂了很多.这是因为相对于之前的只需srand.rand这两函数即可获取随机数来说,C++11提供了太多的选择和东西. 随机数生成算 ...
- C++11 随机数
C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...
- C++11 随机数生成器
背景 考试想造浮点数然后发现不会 正好下午被虎哥茶话会 谈到了一些不会的问题balabala的 被告知\(C++11\)有些神奇特性(哦豁) 然后就学习了一手看上去没什么用的随机数生成器\(QwQ\) ...
- 漫谈c++11 Thread库之使写多线程程序
c++11中最重要的特性之一就是对多线程的支持了,然而<c++ primer>5th却没有这部分内容的介绍,着实人有点遗憾.在网上了解到了一些关于thread库的内容.这是几个比较不错的学 ...
随机推荐
- 业务级别MySQL
业务级别MySQL 目录 业务级别MySQL 1. 权限管理和备份 1. 用户管理 1. SQLyog可视化操作 2. SQL命令操作 2. MySQL备份 3. 规范数据库设计 1. 为什么需要设计 ...
- 11.QT-ffmpeg+QAudioOutput实现音频播放器
1.前言 由于QAudioOutput支持的输入数据必须是原始数据,所以播放mp3,WAV,AAC等格式文件,需要解封装后才能支持播放. 而在QT中,提供了QMediaPlayer ...
- 微信小程序-组件-视图容器
1.view 1.作用:类似 html 的 div 用来进行页面布局,具有块级盒子特性. 2.常用属性:设置view盒子点击后的状态,以及控制是否影响父盒子的点击状态 3.eg:<view ho ...
- linux下设置账户锁定阈值:登录失败n次,多长时间后解锁重新登录
在centos系统下: 1.执行命令 vim /etc/pam.d/system-auth或vim /etc/pam.d/ login 2.执行命令 vim /etc/pam.d/sshd 3.在上面 ...
- 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 4 - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络)
Week 4 Quiz - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络) \1. What is the "cache" ...
- Node.js 从零开发 web server博客项目[安全]
web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...
- zookeeper(3) 持久化
zookeeper为了防止,系统宕机或重启导致的数据丢失,会对数据进行定时持久化.有两种持久化方式: 1.为每次事务操作记录到日志文件,这样就可以通过执行这些日志文件来恢复数据. 2.为了加快ZooK ...
- ftp自动上传下载同步工具 免费好用的ftp自动上传下载同步工具
有时我们需要定时上传文件到FTP,可大多数FTP工具并不支持定时上传功能,这时我们就需要可以定时ftp上传的工具(服务器管理工具).它是一款功能强大的服务器集成管理器,包含win系统和linux系统的 ...
- Sqlmap爆库命令的简单使用
转载:https://blog.csdn.net/qq_41617034/article/details/89502428 测试地址:因为涉及商业隐私,这里就不列啦 我这里用的是windows,并没有 ...
- jstl中ftm标签用法
<fmt:formatDate value="${dateTime}" pattern="yyyy/MM/dd HH:mm:ss"/>