1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
/*Copyright (C) 2015 Olivier Delaneau, Halit Ongen, Emmanouil T. Dermitzakis
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.*/
#ifndef _RANDOM_NUMBER_H
#define _RANDOM_NUMBER_H
#include <cfloat>
#include <cstdint>
#include <random>
class random_number_generator {
protected:
unsigned int seed;
std::mt19937 randomEngine;
std::uniform_int_distribution < unsigned int > uniformDistributionInt;
std::uniform_real_distribution < double > uniformDistributionDouble;
public:
random_number_generator(unsigned int seed = 15052011) : randomEngine(seed), uniformDistributionInt(0, 32768), uniformDistributionDouble(0, 1.0) {
}
~random_number_generator(){
}
void setSeed(unsigned int _seed) {
seed = _seed;
randomEngine.seed(seed);
}
unsigned int getSeed() {
return seed;
}
std::mt19937 & getEngine() {
return randomEngine;
}
unsigned int getInt(unsigned int imin, unsigned int imax) {
return uniformDistributionInt(randomEngine, std::uniform_int_distribution < unsigned int > {imin, imax}.param());
}
unsigned int getInt(unsigned int isize) {
return getInt(0, isize - 1);
}
double getDouble(double fmin, double fmax) {
return uniformDistributionDouble(randomEngine, std::uniform_real_distribution < double > {fmin, fmax}.param());
}
double getDouble() {
return getDouble(0.0, 1.0);
}
};
#endif
|