📄 random.cpp
字号:
//#if defined(__GNUC__) && defined(GCC_PCH)// #include "aux.hpp"//#else #include "Random.hpp"//#endif#include "boost/mpi.hpp"#include <time.h>#include <assert.h>using namespace indii::ml::aux;bool Random::isInit = false;gsl_rng* Random::rng = NULL;double Random::uniform(const double lower, const double upper) { if (!isInit) { init(); } return lower + gsl_rng_uniform(rng) * (upper - lower);}double Random::gaussian(const double mean, const double sigma) { if (!isInit) { init(); } if (sigma == 0.0) { return mean; } else { return mean + gsl_ran_gaussian(rng, sigma); }}void Random::seed(unsigned int seed) { if (!isInit) { init(); } gsl_rng_set(rng, seed);}void Random::init() { int seed; /* construct random number generator */ gsl_rng_env_setup(); //rng = gsl_rng_alloc(gsl_rng_ranlxd2); // best randomness rng = gsl_rng_alloc(gsl_rng_mt19937); // best randomness/speed tradeoff /* select seed */ seed = time(NULL); if (boost::mpi::environment::initialized()) { /* ensure two nodes aren't seeded with the same number */ boost::mpi::communicator world; const int rank = world.rank(); seed += 1000 * rank; } /* seed random number generator */ gsl_rng_set(rng, seed); isInit = true; /* post-condition */ assert (isInit);}void Random::terminate() { if (isInit) { gsl_rng_free(rng); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -