This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/math/distribution/Exponential.h
FrankE 62d8d6b36b refactored random subsystem
added compile-time seed support
2016-04-26 15:15:28 +02:00

53 lines
938 B
C++

#ifndef EXPONENTIAL_H
#define EXPONENTIAL_H
#include <cmath>
#include <random>
#include "../Random.h"
namespace Distribution {
/** exponential distribution */
template <typename T> class Exponential {
private:
const T lambda;
RandomGenerator gen;
std::exponential_distribution<T> dist;
public:
/** ctor */
Exponential(const T lambda) : lambda(lambda), gen(RANDOM_SEED), dist(lambda) {
;
}
/** get probability for the given value */
T getProbability(const T val) const {
return getProbability(lambda, val);
}
/** get an exponentially distributed random number */
T draw() {
return dist(gen);
}
/** set the seed to use */
void setSeed(const long seed) {
gen.seed(seed);
}
/** get the probability for the given value */
static T getProbability(const T lambda, const T val) {
return (val < 0) ? (0) : (lambda * std::exp( -lambda * val ));
}
};
}
#endif // EXPONENTIAL_H