boost高质量随机数库 zhuan
shared_ptr<int> tmp2(new int(10)) ;
int * test=tmp2.get();
std::cout<<*test<<" "<<*tmp2<<" "<< * ( (int*)( tmp2.get() ) );
10 10 1011
not 10 10 10
why?
一. 概念
随机数被用在很多场合, 比如数值计算, 游戏, 加密, 测试.
根据场合的不同, 需求的随机数发生器也不尽相同. 可以分为一下三种.
non-deterministic random number generator
pseudo-random number generator
quasi-random number generator
[数字发生器{number generator)]
一个数字发生器是一个函数对象, 对他直接调用operator()就可以.
[随机数发生器(uniform random number generator)]
基于数字发生器, 但是产生的是随机数. 可以通过has_fixed_range指定随机数
是否该有产生范围, 可以通过min_value和max_value来指定随机数产生的范围界
限.
[非确定性随机数发生器(Non-deterministic Uniform Random Number Generator)]
这是真正的"随机数"发生器. 基本上没有可能在标准C++范围之内完成, 所以使
用的random_device类的构造函数需要传入一个字符串来指明随机数发生设备的
位置. 在很多unix下面,就是/dev/urandom.
[伪随机数发生器(Pseudo-Random Number Generator)]
基于随机数发生器. 通过特定的算法和内部状况, 产生确定性的伪随机数序列. 可以通过seed来设定种子.
[Quasi-Random Number Generators(不知道怎么称呼)]
实际上就是对于已知的随机数种子根据特定算法算出来的确定数组, 这在很多场
合就足够的了.
二. 使用
random的文件组织相对复杂, 一般情况下, 直接包含random.hpp是最简单直接的办法.
要声明一个generator来产生随机数, 比如boost::hellekalek1995 generator(13);
boost::hellekalek1995是一个随机数产生器, 13是个随机数种子.
然后声明一个随机数分布(uniform random number distribution)来产生随机数.
比如
boost::uniform_smallint<boost::hellekalek1995> die_gen(generator,1, 6)
然后就可以不停的读取die_gen, 比如
std::cout << dir_gen() << std::endl;
一个最简单的例子比如:
#include <iostream>
#include <boost/random.hpp>
int main()
{
boost::hellekalek1995 generator(17);
boost::uniform_smallint<boost::hellekalek1995> die_gen(generator, 1, 6);
for( int i = 1; i <= 10; i++ )
{
std::cout << die_gen() << std::endl;
}
return 0;
}
|
|
usidc5 | 2011-07-18 12:16 |
简介 概览 uniform_smallint 类模板 uniform_int 类模板 uniform_01 类模板 uniform_real 类模板 bernoulli_distribution 类模板 geometric_distribution 类模板 triangle_distribution 类模板 exponential_distribution 类模板 normal_distribution 类模板 lognormal_distribution 类模板 uniform_on_sphere 类模板 简介 除了 随机数生成器 之外,本库还提供了把一种分布 (通常是生成器产生的均匀分布) 映射到另一种分布的分布函数。(译注:在本节中,“分布”指统计学意义上的分布,而“分布函数”指的是类模板。内部的随机数生成器有时会更一般地被称为“随机数源”。) 对于某一映射通常会有多种实现方案:有的需要较多的空间和对内部随机数源的调用,而有的需要进行较多的费时的运算 (如三角函数)。以下给出的对接口的描述是与具体实现无关的;然而,如果某一实现不能覆盖特定分布的全部值域,或者不符合该分布的统计学性质,该实现是无效的。 分布 描述 实例 uniform_smallint 在小整数集 (远小于内部生成器的值域) 上的离散均匀分布 罐中取物 uniform_int 在整数集上的离散均匀分布;可能会多次调用内部生成器以获得足够多的“随机性” 罐中取物 uniform_01 区间 [0,1) 上的连续均匀分布;此分布是其它分布的重要基础 - uniform_real 实数区间 [min, max) 上的连续均匀分布 随机投下一木棍,其偏转角的弧度数是 [0, 2pi) 上的这种分布 (假设偏转角的分布是均匀的) bernoulli_distribution 伯努利试验 (Bernoulli experiment):布尔离散分布,概率可配置 投掷硬币 (p=0.5) geometric_distribution 几何分布:重复伯努利试验,直到出现某一结果的试验次数 抛掷骰子,记录“6”首次出现时的试验次数 triangle_distribution ? ? exponential_distribution 指数分布 放射性物质发射 alpha 粒子的间隔时间 normal_distribution 无穷次重复伯努利试验的结果计数 投掷硬币 10000 次,记录正面出现的次数 lognormal_distribution 对数正态分布 (lognormal distribution) (有时用于模拟) 流水线工人的工作完成时间 uniform_on_sphere 任意给定维数空间的单位球面上的均匀分布 在地球 (近似看作是球体) 表面任选一点去旅游 分布函数的模板参数总按照下列顺序排列: 内部随机数源 返回类型,其默认值为一合适的类型 (可能无这一参数) 分布函数不再满足输入迭代器 (input iterator) 的需求 (std:24.1.1 [lib.input.iterators]),因为这对于生成器(Generator)接口来说是多余的,还会对所有用户带来运行时的开销。而且,一个诉诸于随机数生成的生成器接口更为"自然"。如果你需要把生成器包装进一个输入迭代器接口,可以使用 迭代器适配器(iterator adaptor)。 下面描述的所有分布函数都保存对随机数源的一个非 const 引用;因此分布函数不是 Assignable;不过它们是 CopyConstructible。复制分布函数将会复制参数值;副本和原分布函数将会使用同一内部随机数源,因此两者会从同一序列中取得随机数。 对于在 概念文档 中已经给出定义的成员,在下面的描述中不会详细说明。 <boost/random.hpp> 中的分布:概览 namespace boost { template<class IntType = int> class uniform_smallint; template<class IntType = int> class uniform_int; template<class RealType = double> class uniform_01; template<class RealType = double> class uniform_real; // discrete distributions // continuous distributions template<class IntType = int> template<class IntType = int> template<class UniformRandomNumberGenerator, class RealType = double> template<class RealType = double> template<class RealType = double> explicit bernoulli_distribution(const RealType& p = RealType(0.5)); template<class UniformRandomNumberGenerator, class IntType = int> explicit geometric_distribution(const RealType& p = RealType(0.5)); template<class RealType = double> template<class RealType = double> template<class RealType = double> template<class RealType = double> template<class RealType = double, 代码实例: #include "boost/scoped_ptr.hpp" uniform_int<> distribution(1, 100) ; |
boost高质量随机数库 zhuan的更多相关文章
- R语言的高质量图形渲染库Cairo(转)
前言 R语言不仅在统计分析,数据挖掘领域,计算能力强大.在数据可视化上,也不逊于昂贵的商业.当然,背后离不开各种开源软件包的支持,Cairo就是这样一个用于矢量图形处理的类库. Cairo可以创建高质 ...
- mt19937 -- 高质量随机数
优点:产生速度快, 周期大 用法: #include<bits/stdc++.h> using namespace std; int main() { mt19937 mt_rand(ti ...
- Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库
Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库 文档 https://phonycode.github.io/wuss-weapp 扫码体验 使用微信扫一扫体验小程序组 ...
- 编写高质量Python程序(四)库
本系列文章为<编写高质量代码--改善Python程序的91个建议>的精华汇总. 按需选择 sort() 或者 sorted() Python 中常用的排序函数有 sort() 和 sort ...
- 高质量C++/C编程指南(林锐)
推荐-高质量C++/C编程指南(林锐) 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐 2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐 20 ...
- HTML Inspector – 帮助你编写高质量的 HTML 代码
HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...
- 高质量C++[转]
高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日 版 本 ...
- iOS书摘之编写高质量iOS与OS X代码的52个有效方法
来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 ...
随机推荐
- ionic3 在ios9.0 系统下 会出现ReferenceError:Can't find variable:Intl 错误提示
ionic3 框架开发app 在ios 9.0版本中 ReferenceError:Can't find variable:Intl 错误提示: 在index.html 文件中添加 <scri ...
- laravel框架基础(1)---入门与介绍
1.安装laravel5.7 (composer )2018-12-28 11:59:02 [作者:struggler] Php的版本要求:php>=7.1.3 打开php OpenSSL扩展 ...
- windows程序设计 显示一个窗口
#include <windows.h> HINSTANCE hinst; LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM) ...
- 4.Python3运算符
4.1算数运算符(以下假设变量a为10,变量b为21) 实例操作: print(3 + 5) #数字3与5相加 print(3 - 5) #数字3与5相减 print(3 * 5) #数字3与5相乘 ...
- <转>jmeter(二十)阶梯式加压测试
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- 爬虫----selenium模块
一.介绍 selenium最初是一个测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳 ...
- 表单、框架结构的大概、CSS开头(选择器以及常用属性)
<!--为网页添加图标,写在头部--> <link rel="shortcut icon" href="favicon.ico(路径)" ty ...
- 基础的基于QT的图像查看程序
代码来自<QT5.9c++开发指南>,因为实现了图片的遍历显示,对于将来编写ImageShop一类的图像程序来说将非常有用(这个程序目前存在一定问题,在研究过程中进行解决) 一.基本功能 ...
- jackson中@JsonProperty、@JsonIgnore等常用注解总结
本文为博主原创,未经允许不得转载: 最近用的比较多,把json相关的知识点都总结一下,jackjson的注解使用比较频繁, jackson的maven依赖 <dependency> < ...
- 在 jupyter 中添加菜单和自动完成功能
在 jupyter 中添加菜单和自动完成功能 参考文档http://www.360doc.com/content/17/1103/14/1489589_700569828.shtmlhttp://to ...