なぜ私は次のようなことをしなければならないのですか:
#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 回実行しています。これは、本当に良い乱数が必要であることを意味します。