source: XIOS/dev/dev_olga/src/extern/blitz/include/random/chisquare.h @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 1.1 KB
Line 
1// -*- C++ -*-
2// $Id$
3
4/*
5 * Chi^2 distribution
6 *
7 * This code has been adapted from RANDLIB.C 1.3, by
8 * Barry W. Brown, James Lovato, Kathy Russell, and John Venier.
9 * Code was originally by Ahrens and Dieter (see above).
10 *
11 * Adapter's notes:
12 */
13
14#ifndef BZ_RANDOM_CHISQUARE
15#define BZ_RANDOM_CHISQUARE
16
17#ifndef BZ_RANDOM_GAMMA
18 #include <random/gamma.h>
19#endif
20
21BZ_NAMESPACE(ranlib)
22
23template<typename T = double, typename IRNG = defaultIRNG, 
24    typename stateTag = defaultState>
25class ChiSquare : public Gamma<T,IRNG,stateTag>
26{
27public:
28    typedef T T_numtype;
29
30    ChiSquare(T df)
31      : Gamma<T,IRNG,stateTag>(df/2.0) // isn't this redundant with setDF call?
32    {
33        setDF(df);
34    }
35
36  ChiSquare(T df, unsigned int i)
37    : Gamma<T,IRNG,stateTag>(df/2.0, i)
38    {
39        setDF(df);
40    }
41
42    void setDF(T _df)
43    {
44        BZPRECONDITION(_df > 0.0);
45        df = _df;
46        Gamma<T,IRNG,stateTag>::setMean(df/2.0);
47    }
48
49    T random()
50    {
51        return 2.0 * sgamma();
52    }
53
54protected:
55    T sgamma()
56    {
57        return Gamma<T,IRNG,stateTag>::random();
58    }
59
60    T df;
61};
62
63BZ_NAMESPACE_END
64
65#endif // BZ_RANDOM_CHISQUARE
Note: See TracBrowser for help on using the repository browser.