random/chisquare.h

Go to the documentation of this file.
00001 /*
00002  * Chi^2 distribution
00003  *
00004  * This code has been adapted from RANDLIB.C 1.3, by
00005  * Barry W. Brown, James Lovato, Kathy Russell, and John Venier.
00006  * Code was originally by Ahrens and Dieter (see above).
00007  *
00008  * Adapter's notes:
00009  */
00010 
00011 #ifndef BZ_RANDOM_CHISQUARE
00012 #define BZ_RANDOM_CHISQUARE
00013 
00014 #ifndef BZ_RANDOM_GAMMA
00015  #include <random/gamma.h>
00016 #endif
00017 
00018 BZ_NAMESPACE(ranlib)
00019 
00020 template<typename T = double, typename IRNG = defaultIRNG, 
00021     typename stateTag = defaultState>
00022 class ChiSquare : public Gamma<T,IRNG,stateTag>
00023 {
00024 public:
00025     typedef T T_numtype;
00026 
00027     ChiSquare(T df)
00028       : Gamma<T,IRNG,stateTag>(df/2.0)
00029     {
00030         setDF(df);
00031     }
00032 
00033     void setDF(T _df)
00034     {
00035         BZPRECONDITION(_df > 0.0);
00036         df = _df;
00037         Gamma<T,IRNG,stateTag>::setMean(df/2.0);
00038     }
00039 
00040     T random()
00041     {
00042         return 2.0 * sgamma();
00043     }
00044 
00045 protected:
00046     T sgamma()
00047     {
00048         return Gamma<T,IRNG,stateTag>::random();
00049     }
00050 
00051     T df;
00052 };
00053 
00054 BZ_NAMESPACE_END
00055 
00056 #endif // BZ_RANDOM_CHISQUARE

Generated on Wed Oct 17 16:27:25 2007 for blitz by  doxygen 1.5.2