boost随机数

一. 概念
随机数被用在很多场合, 比如数值计算, 游戏, 加密, 测试.

根据场合的不同, 需求的随机数发生器也不尽相同. 可以分为一下三种.

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;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值