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_deviceentropy接口返回0。

C++11随机数库的更多相关文章

  1. C++11随机数发生器

    前言 一直知道所谓的"随机数"都是伪随机,事实上也是满足某种规则生成的.有些程序测试时通常需要一个随机数源,但在新标准出现之前,C++都是依赖简单的C库函数rand来生成随机数的. ...

  2. C++11随机数的正确打开方式

    C++11随机数的正确打开方式 在C++11之前,现有的随机数函数都存在一个问题:在利用循环多次获取随机数时,如果程序运行过快或者使用了多线程等方法,srand((unsigned)time(null ...

  3. 漫谈C++11 Thread库之原子操作

    我在之前一篇博文<漫谈C++11 Thread库之使写多线程程序>中,着重介绍了<thread>头文件中的std::thread类以及其上的一些基本操作,至此我们动手写多线程程 ...

  4. C++11 标准库也有坑(time-chrono)

    恰巧今天调试程序遇到时间戳问题, 于是又搜了搜关于取时间戳,以及时间戳转字符串的问题, 因为 time()   只能取到秒(win和linux) 想试试看能不能找到 至少可以取到毫秒的, 于是, 就找 ...

  5. boost高质量随机数库 zhuan

    shared_ptr<int> tmp2(new int(10)) ; int * test=tmp2.get(); std::cout<<*test<<" ...

  6. [转]C++11 随机数学习

    相对于C++ 11之前的随机数生成器来说,C++11的随机数生成器是复杂了很多.这是因为相对于之前的只需srand.rand这两函数即可获取随机数来说,C++11提供了太多的选择和东西. 随机数生成算 ...

  7. C++11 随机数

    C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...

  8. C++11 随机数生成器

    背景 考试想造浮点数然后发现不会 正好下午被虎哥茶话会 谈到了一些不会的问题balabala的 被告知\(C++11\)有些神奇特性(哦豁) 然后就学习了一手看上去没什么用的随机数生成器\(QwQ\) ...

  9. 漫谈c++11 Thread库之使写多线程程序

    c++11中最重要的特性之一就是对多线程的支持了,然而<c++ primer>5th却没有这部分内容的介绍,着实人有点遗憾.在网上了解到了一些关于thread库的内容.这是几个比较不错的学 ...

随机推荐

  1. 转载:Window配置Redis环境和简单使用

    原作:https://www.cnblogs.com/wxjnew/p/9160855.html 我自己的尝试:https://www.cnblogs.com/xiandedanteng/p/1214 ...

  2. Kubernetes-12:Secret介绍及演示

    Secret介绍 Secret存在的意义 Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中,可以以Volume或者环境变量的方式使用 ...

  3. 使用镜像安装cygwin、gcc并配置CLion IDE -2020.09.12

    使用镜像安装cygwin.gcc并配置CLion IDE -2020.09.12 Cygwin 官网:http://www.cygwin.com/ 下载64bit安装器,并打开选择next 尽量不要装 ...

  4. docker push出现denied: requested access to the resource is denied

    今天想再 把本地的docker image 镜像push 到: https://hub.docker.com/ Step1: login : https://hub.docker.com/ [root ...

  5. docker 搭建私有云仓库

    docker搭建私有仓库   registry私有仓库 下载docker-distribution软件包 yum install epel-release yum install docker-dis ...

  6. 云计算openstack——云计算、大数据、人工智能(16)

    一.互联网行业及云计算 在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS.PAAS.SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用.给我 ...

  7. Python爬虫练习:爬取800多所大学学校排名、星级等

    前言 国内大学最新排名,北大反超,浙大仅第四,中科大跌至第八 时隔五年,"双一流"大学即将迎来首次大考,这也是继改变高校评断标准之后,第一次即将以官方对外发布,自然是引来了许多人的 ...

  8. ASP.NET Web API 2系列(四):基于JWT的token身份认证方案

    1.引言 通过前边的系列教程,我们可以掌握WebAPI的初步运用,但是此时的API接口任何人都可以访问,这显然不是我们想要的,这时就需要控制对它的访问,也就是WebAPI的权限验证.验证方式非常多,本 ...

  9. Java源码赏析(一)Object 类

    写这个系列的原因,其实网上已经有无数源码分析的文章了,多一篇不多,少一篇不少,但为什么还要写这部分文章呢?于私,其一,上班族已经很久没有打过完整的一整段有意义的话,算是锻炼个人的书写.总结能力,其二, ...

  10. xss的编码原理

    把以前的笔记翻出来整理一下 最前方 xss如何选用编码原理,为什么 找到的挺清楚的文章了:https://www.cnblogs.com/p0laris/p/11898322.html浏览器解析有两种 ...