23 Ocak 2018 Salı

random variate_generator Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/random.hpp>
Şu satırı dahil ederiz.
#include <boost/random/variate_generator.hpp>
Belirtilen random number generator ve distribution nesnelerini birleştirerek bir generator yaratır. C++ standardına bu sınıf girmemiştir. Onun yerine şöyle yaparız.
#include <random>
#include <functional> // for std::bind
...
using std::mt19937;
using std::uniform_real_distribution;

typedef mt19937                                     Engine;
typedef uniform_real_distribution<float>            Distribution;

auto r = std::bind(Distribution(0.0f, 1.0f), Engine((DWORD)time(NULL)));

// from now, calling float rnd = r() gave me a random number between 0.0f and 1.0f in rnd.
Tanımlama
Örnek
uniform_int ile şöyle yaparız.
typedef boost::uniform_int<> UniformIntDistr;
typedef boost::variate_generator<boost::mt19937, UniformIntDistr> MyRandom;
Örnek
boost::uniform_real ile şöyle yaparız.
boost::variate_generator<boost::mt19937, boost::uniform_real<> > MyRandom;
Örnek
std::uniform_real ile şöyle yaparız
boost::variate_generator< boost::mt19937, std::uniform_real_distribution<>> MyRandom;
Örnek
students_t ile şöyle yaparız.

Örnek
Şöyle yaparız.
boost::variate_generator<boost::mt19937,boost::uniform_01<> > MyRandom;
Constructor - generator + distribution
Örnek
Şöyle yaparız.
// make random number generator
boost::mt19937 rng;
UniformIntDistr dis(0, 1000);
MyRandom gen (rng, dis);
Örnek
Şöyle yaparız
boost::mt19937 rng (42u);
boost::uniform_real<> dis (0,1);
MyRandom gen (rng, dis);
Örnek
Şöyle yaparız
boost::mt19937 rng;

std::uniform_real_distribution<> dis (1,2);
MyRandom gen (rng, dis);
operator() metodu
Şöyle yaparız.
double value = gen();

Hiç yorum yok:

Yorum Gönder