52 lines
1.6 KiB

#include "storm/utility/random.h"
#include <limits>
namespace storm {
namespace utility {
RandomProbabilityGenerator<double>::RandomProbabilityGenerator()
: distribution(0.0, 1.0)
{
std::random_device rd;
engine = std::mt19937(rd());
}
RandomProbabilityGenerator<double>::RandomProbabilityGenerator(uint64_t seed)
: distribution(0.0, 1.0), engine(seed)
{
}
double RandomProbabilityGenerator<double>::random() {
return distribution(engine);
}
uint64_t RandomProbabilityGenerator<double>::random_uint(uint64_t min, uint64_t max) {
return std::uniform_int_distribution<uint64_t>(min, max)(engine);
}
RandomProbabilityGenerator<RationalNumber>::RandomProbabilityGenerator()
: distribution(0, std::numeric_limits<uint64_t>::max())
{
std::random_device rd;
engine = std::mt19937(rd());
}
RandomProbabilityGenerator<RationalNumber>::RandomProbabilityGenerator(uint64_t seed)
: distribution(0, std::numeric_limits<uint64_t>::max()), engine(seed)
{
}
RationalNumber RandomProbabilityGenerator<RationalNumber>::random() {
return carl::rationalize<RationalNumber>(distribution(engine)) / carl::rationalize<RationalNumber>(std::numeric_limits<uint64_t>::max());
}
uint64_t RandomProbabilityGenerator<RationalNumber>::random_uint(uint64_t min, uint64_t max) {
return std::uniform_int_distribution<uint64_t>(min, max)(engine);
}
}
}