📄 exponential.h
字号:
/* * This generator uses the straightforward transformation * x = - log(y) * m * * to turn a uniform (0,1) y into an exponentially distributed * variable x. x has density function * * f(x) = (1/m) exp(-(1/m)x) (x > 0) * * and mean m. * * NEEDS_WORK: Adapt the method of Ahrens and Dieter. This will * require extending the precision of the constants. * * Ahrens, J.H. and Dieter, U. Computer Methods for Sampling From the * Exponential and Normal Distributions. Comm. ACM, 15,10 (Oct. 1972), p. 873. */#ifndef BZ_RANDOM_EXPONENTIAL#define BZ_RANDOM_EXPONENTIAL#ifndef BZ_RANDOM_UNIFORM #include <random/uniform.h>#endifBZ_NAMESPACE(ranlib)template<typename T = double, typename IRNG = defaultIRNG, typename stateTag = defaultState>class ExponentialUnit : public UniformOpen<T,IRNG,stateTag>{public: typedef T T_numtype; T random() { return - log(UniformOpen<T,IRNG,stateTag>::random()); }};template<typename T = double, typename IRNG = defaultIRNG, typename stateTag = defaultState>class Exponential : public ExponentialUnit<T,IRNG,stateTag> {public: typedef T T_numtype; Exponential(T mean) { mean_ = mean; } T random() { return mean_ * ExponentialUnit<T,IRNG,stateTag>::random(); }private: T mean_;};BZ_NAMESPACE_END#endif // BZ_RANDOM_EXPONENTIAL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -