1

なぜ私は次のようなことをしなければならないのですか:

#include <boost/random.hpp>
#include <ctime>

using namespace boost;

double SampleNormal (double mean, double sigma)
{
    static mt19937 rng(static_cast<unsigned> (std::time(0)));
    normal_distribution<double> norm_dist(mean, sigma);
    variate_generator<mt19937&, normal_distribution<double> >  normal_sampler(rng,         norm_dist);
    return normal_sampler();
}

コードが次のように思われる場合:

#include <boost/random.hpp>
#include <ctime>

using namespace boost;

double SampleNormal (double mean, double sigma)
{
    static mt19937 rng(static_cast<unsigned> (std::time(0)));
    normal_distribution<double> norm_dist(mean, sigma);
    return norm_dist(rng);
}

同様に機能するはずです。

variate_generator を使用する理由 2 番目の例よりも多くのことを実行しますか?

ちょっとした背景: ランダムなプロセスが発生するループの 10^7 反復を含むシミュレーションのインスタンス化を 100 回実行しています。これは、本当に良い乱数が必要であることを意味します。

4

1 に答える 1