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.autosave
FrankE 0e05f4bef8 started removing KLib related code:
- assertions
- distributions
new helper methods
worked on stairs
worked on grid-walkers
worked on navigation
2016-01-27 20:03:58 +01:00

55 lines
912 B
Plaintext

#ifndef EXPONENTIAL_H
#define EXPONENTIAL_H
#include <cmath>
#include <random>
namespace Distribution {
template <typename T> class Exponential {
private:
T lambda;
std::minstd_rand gen;
std::exponential_distribution<T> dist;
public:
/** ctor */
Exponential(const T lambda) : lambda(lambda), gen(1234), dist(lambda) {
;
}
/** get probability for the given value */
T getProbability(const T val) const {
return lambda * std::exp(-lambda * val);
}
/** get a normally 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 double getProbability(const double lambda, const double val) {
return lambda * std::exp(-lambda * val);
}
};
};
}
#endif // EXPONENTIAL_H