⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f.h

📁 A C++ class library for scientific computing
💻 H
字号:
/* * F distribution * * This code has been adapted from RANDLIB.C 1.3, by * Barry W. Brown, James Lovato, Kathy Russell, and John Venier. * Code was originally by Ahrens and Dieter (see above). * * Adapter's notes: * BZ_NEEDS_WORK: how to handle seeding for the two gamma RNGs if * independentState is used? * BZ_NEEDS_WORK: code for handling possible overflow when xden * is tiny seems a bit flaky. */#ifndef BZ_RANDOM_F#define BZ_RANDOM_F#ifndef BZ_RANDOM_GAMMA #include <random/gamma.h>#endifBZ_NAMESPACE(ranlib)template<typename T = double, typename IRNG = defaultIRNG,     typename stateTag = defaultState>class F {public:    typedef T T_numtype;    F(T numeratorDF, T denominatorDF)    {        setDF(numeratorDF, denominatorDF);        mindenom = 0.085 * tiny(T());    }    void setDF(T _dfn, T _dfd)    {        BZPRECONDITION(_dfn > 0.0);        BZPRECONDITION(_dfd > 0.0);        dfn = _dfn;        dfd = _dfd;        ngamma.setMean(dfn/2.0);        dgamma.setMean(dfd/2.0);    }    T random()    {        T xnum = 2.0 * ngamma.random() / dfn;        T xden = 2.0 * ngamma.random() / dfd;        // Rare event: Will an overflow probably occur?        if (xden <= mindenom)        {            // Yes, just return huge(T())            return huge(T());        }        return xnum / xden;    }    void seed(IRNG_int s)    {        // This is such a bad idea if independentState is used. Ugh.        // If sharedState is used, it is merely inefficient (the        // same RNG is seeded twice).        ngamma.seed(s);        dgamma.seed(s);    }protected:    Gamma<T,IRNG,stateTag> ngamma, dgamma;    T dfn, dfd, mindenom;};BZ_NAMESPACE_END#endif // BZ_RANDOM_F

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -