c – boost :: random每次生成相同的数字
发布时间:2020-12-16 03:00:17 所属栏目:百科 来源:网络整理
导读:主要的.cpp #include "stdafx.h"#include "random_generator.h" intmain ( int argc,char *argv[] ){ cout.setf(ios::fixed); base_generator_type base_generator; int max = pow(10,2); distribution_type dist(1,max); boost::variate_generatorbase_gene
主要的.cpp
#include "stdafx.h" #include "random_generator.h" int main ( int argc,char *argv[] ) { cout.setf(ios::fixed); base_generator_type base_generator; int max = pow(10,2); distribution_type dist(1,max); boost::variate_generator<base_generator_type&,distribution_type > uni(base_generator,dist); for ( int i=0; i<10; i++ ) { //cout << random_number(2) << endl; cout << uni() << endl; } return EXIT_SUCCESS; } /* ---------- end of function main ---------- */ random_gemerator.h #include "stdafx.h" #include <boost/random.hpp> #include <boost/generator_iterator.hpp> typedef boost::mt19937 base_generator_type; typedef boost::lagged_fibonacci19937 fibo_generator_type; typedef boost::uniform_int<> distribution_type; typedef boost::variate_generator<fibo_generator_type&,distribution_type> gen_type; int random_number ( int bits ) { fibo_generator_type fibo_generator; int max = pow(10,bits); distribution_type dist(1,max); gen_type uni(fibo_generator,dist); return uni(); } /* ----- end of function random_number ----- */ stdafx.h中 #include <iostream> #include <cstdlib> #include <cmath> using namespace std; 每次运行它,都会产生相同的数字序列 像77,33,5,22,… 如何使用boost:随机正确? 这就对了.但也许有一点问题,如下所示: 看起来好听 get_seed(); for (;;) {cout << generate_random() << endl; } // is ok 它产生相同的随机数 int get_random() {get_seed();return generate_random();} for (;;) {cout << get_random() <<endl;} // output the same random number yet 解决方法
如果您希望每次运行程序时都会更改随机数序列,则需要通过使用当前时间进行初始化来更改随机种子
你会发现一个例子there,摘录: /* * Change seed to something else. * * Caveat: std::time(0) is not a very good truly-random seed. When * called in rapid succession,it could return the same values,and * thus the same random number sequences could ensue. If not the same * values are returned,the values differ only slightly in the * lowest bits. A linear congruential generator with a small factor * wrapped in a uniform_smallint (see experiment) will produce the same * values for the first few iterations. This is because uniform_smallint * takes only the highest bits of the generator,and the generator itself * needs a few iterations to spread the initial entropy from the lowest bits * to the whole state. */ generator.seed(static_cast<unsigned int>(std::time(0))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [每日一题] OCP1z0-047 :2013-08-22 正则表达式---[^Ale|ax
- c# – 重构斐波纳契算法
- 关于Sqlite多进程同时写遇到SQLITE_LOCKED的问题
- ruby-on-rails – Ruby中的“equals greater than”operato
- Cocos2d-x_CCDirector(导演类)介绍
- 由Kotlin纪念ActionScript和Flex
- SQLITE select 输出限定
- flex datagrid itemrender 渲染 问题及解决办法
- Reactor pattern - Introduction by wiki
- 使用Flash Builder 4和Web Service创建数据为中心的简单应用