diff --git a/libs/random/include/psemek/random/exponential.hpp b/libs/random/include/psemek/random/exponential.hpp new file mode 100644 index 00000000..612f822f --- /dev/null +++ b/libs/random/include/psemek/random/exponential.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include + +#include + +namespace psemek::random +{ + + template + struct exponential_distribution + { + exponential_distribution(T lambda) + : lambda_(lambda) + {} + + template + T operator()(RNG & rng) + { + T const y = uniform(rng); + return - std::log(1 - y) / lambda_; + } + + private: + T lambda_; + }; + +}