C++11带来的随机数生成器
来源:互联网 发布:淘宝直通车在哪儿 编辑:程序博客网 时间:2024/05/24 03:30
点击打开链接
1. random_device
标准库提供了一个非确定性随机数生成设备.在Linux的实现中,是读取/dev/urandom设备;Windows的实现居然是用rand_s,在这里强烈谴责一下.
random_device提供()操作符,用来返回一个min()到max()之间的一个数字.如果是Linux(Unix Like或者Unix)下,都可以使用这个来产生高质量的随机数,可以理解为真随机数.
2. random number engine
标准把随机数抽象成随机数引擎和分布两部分.引擎用来产生随机数,分布产生特定分布的随机数(比如平均分布,正态分布等).
标准提供三种常用的引擎:linear_congruential_engine,mersenne_twister_engine和subtract_with_carry_engine.第一种是线性同余算法,第二种是梅森旋转算法,第三种带进位的线性同余算法.第一种是最常用的,而且速度也是非常快的; 第二种号称是最好的伪随机数生成器;第三种没用过....
#include <iostream>#include <random>
int main(){
std::random_device rd;
std::mt19937 mt(rd());
for(int n =0; n < 10; n++) }
std::cout << mt() << std::endl;
return 0;}
}
3. random number distributions
标准提供各种各样的分布,不过我们经常用的比较少,比如平均分布,正太分布...使用也很简单
//正态分布
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
#include <cmath>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
// values near the mean are the most likely
// standard deviation affects the dispersion of generated values from the mean
std::normal_distribution<> d(5,2);
std::map<int, int> hist;
for(int n=0; n<10000; ++n) {
++hist[std::round(d(gen))];
}
for(auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
- C++11带来的随机数生成器
- [C++11]C++11带来的随机数生成器
- [C++11]C++11带来的随机数生成器
- C随机数生成器的实现分析
- 随机数生成器C语言
- 严格的随机数生成器
- C语言中的随机数生成器
- 【C++】C++11特性:初始化、hash容器和随机数生成器
- C++ 自定义随机数生成器的使用 <random> 参照C++11
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 随机数生成器
- 找一找 ButterKnife 的不足
- zookeeper——zkCli.sh和JavaAPI(笔记)
- ServletContextListener接口在Spring中的实现
- 双重检查锁定
- web.xml classpath 和 WEB-INF 区别
- C++11带来的随机数生成器
- 如何查看Linux 内核版本
- TensorFlow学习---基础概念和程序的形式
- 常用 Git 命令清单
- Oracle 实用技巧之不知道密码情况下 dblink 的迁移
- HEVC函数入门(6)——帧内预测-详细概念和HM16.3实现(上)
- mysql 创建视图
- 如何复制AS上提示框内的内容
- 基于百度地图的电子围栏设置工具