加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读