0

Boost で 10^8 以上の乱数を生成したい。それらは、標準偏差 1、平均 0 で正規分布している必要があります。これが私の MWE です。

#include <iostream>
#include <vector>

#include <time.h>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>

using namespace std;

int main()
{
    typedef boost::mt19937                     ENG;
    typedef boost::normal_distribution<double> DIST;
    typedef boost::variate_generator<ENG,DIST> GEN;

    ENG  eng;
    DIST dist(0,1);
    GEN  gen(eng,dist);

    gen.engine().seed(time(0));

    vector<double> nums;

    for(int i=0; i<500; i++)
    {
        nums.push_back(gen());
    }

    return 0;
}

この点に関して 2 つの質問があります。

  1. エンジンをシードするために使用しているアプローチは正しいですか? または、各番号の前にシードする必要がありますか?
  2. 私の方法は効率的ですか?それとももっと良い方法がありますか?

EDITコード自体にボトルネックがないことに注意してください。私のアプローチがプロの観点から正しいかどうか疑問に思っています

後で、数値 (すべて) を適切な定数でスケーリングする必要があると言わざるを得ません。私の計画は、これに for ループを使用することです。

最高です、ナイルズ。

4

0 に答える 0