小智 65
此代码改编自http://www.boost.org/doc/libs/1_42_0/libs/random/index.html上的增强手册:
#include <iostream>
#include "boost/random.hpp"
#include "boost/generator_iterator.hpp"
using namespace std;
int main() {
typedef boost::mt19937 RNGType;
RNGType rng;
boost::uniform_int<> one_to_six( 1, 6 );
boost::variate_generator< RNGType, boost::uniform_int<> >
dice(rng, one_to_six);
for ( int i = 0; i < 6; i++ ) {
int n = dice();
cout << n << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
解释一下:
mt19937是mersenne twister生成器,它生成原始随机数.这里使用了typedef,因此您可以轻松更改随机数生成器类型.
rng 是捻线机发生器的一个实例.
one_to_six是分发的实例 .这指定了我们要生成的数字以及它们遵循的分布.这里我们要1到6,均匀分布.
dice 是原始数字和分布的东西,并为我们创建我们真正想要的数字.
dice()是调用operator()的dice对象,它得到了一个随机数的分布如下,模拟随机六面骰子掷.
就目前而言,这段代码每次都会产生相同的骰子序列.您可以在其构造函数中随机化生成器:
RNGType rng( time(0) );
Run Code Online (Sandbox Code Playgroud)
或者使用其seed()成员.
我发现这个链接很好地概述了不同随机数生成器的属性。为方便起见,我从上面的链接复制了表格:
+----------------------+--------------------+----- ------------------------+------------------------+ | 发电机| 周期长度| 大约 内存要求| 大约 相对速度| +----------------------+--------------------+----- ------------------------+------------------------+ | minstd_rand | 2^31-2 | sizeof(int32_t) | 40 | | rand48 | 2^48-1 | 大小(uint64_t)| 80 | | lrand48 (C 库) | 2^48-1 | - | 20 | | ecuyer1988 | 大约 2^61 | 2*sizeof(int32_t) | 20 | | kreutzer1986 | ? | 第 1368 章 60 | | hellekalek1995 | 2^31-1 | sizeof(int32_t) | 3 | | mt11213b | 2^11213-1 | 352*sizeof(uint32_t) | 100 | | mt19937 | 2^19937-1 | 625*sizeof(uint32_t) | 100 | | 滞后_fibonacci607 | 大约 2^32000 | 607*sizeof(double) | 150 | | 滞后_fibonacci1279 | 大约 2^67000 | 第 1279 章 150 | | 滞后_fibonacci2281 | 大约 2^120000 | 2281*sizeof(double) | 150 | | 滞后_fibonacci3217 | 大约 2^170000 | 3217*sizeof(double) | 150 | | 滞后_fibonacci4423 | 大约 2^230000 | 4423*sizeof(double) | 150 | | 滞后_fibonacci9689 | 大约 2^510000 | 9689*sizeof(double) | 150 | | Lagged_fibonacci19937 | 大约 2^1050000 | 19937*sizeof(double) | 150 | | 滞后_fibonacci23209 | 大约 2^1200000 | 23209*sizeof(double) | 140 | | 滞后_fibonacci44497 | 大约 2^2300000 | 44497*sizeof(double) | 60 | +----------------------+--------------------+----- ------------------------+------------------------+
循环长度:开始重复之前的随机数序列的长度
| 归档时间: |
|
| 查看次数: |
38665 次 |
| 最近记录: |