blitz Version 0.10
random/chisquare.h
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id: chisquare.h,v 1.3 2011/03/25 22:41:17 julianc Exp $
00003 
00004 /*
00005  * Chi^2 distribution
00006  *
00007  * This code has been adapted from RANDLIB.C 1.3, by
00008  * Barry W. Brown, James Lovato, Kathy Russell, and John Venier.
00009  * Code was originally by Ahrens and Dieter (see above).
00010  *
00011  * Adapter's notes:
00012  */
00013 
00014 #ifndef BZ_RANDOM_CHISQUARE
00015 #define BZ_RANDOM_CHISQUARE
00016 
00017 #ifndef BZ_RANDOM_GAMMA
00018  #include <random/gamma.h>
00019 #endif
00020 
00021 BZ_NAMESPACE(ranlib)
00022 
00023 template<typename T = double, typename IRNG = defaultIRNG, 
00024     typename stateTag = defaultState>
00025 class ChiSquare : public Gamma<T,IRNG,stateTag>
00026 {
00027 public:
00028     typedef T T_numtype;
00029 
00030     ChiSquare(T df)
00031       : Gamma<T,IRNG,stateTag>(df/2.0) // isn't this redundant with setDF call?
00032     {
00033         setDF(df);
00034     }
00035 
00036   ChiSquare(T df, unsigned int i)
00037     : Gamma<T,IRNG,stateTag>(df/2.0, i)
00038     {
00039         setDF(df);
00040     }
00041 
00042     void setDF(T _df)
00043     {
00044         BZPRECONDITION(_df > 0.0);
00045         df = _df;
00046         Gamma<T,IRNG,stateTag>::setMean(df/2.0);
00047     }
00048 
00049     T random()
00050     {
00051         return 2.0 * sgamma();
00052     }
00053 
00054 protected:
00055     T sgamma()
00056     {
00057         return Gamma<T,IRNG,stateTag>::random();
00058     }
00059 
00060     T df;
00061 };
00062 
00063 BZ_NAMESPACE_END
00064 
00065 #endif // BZ_RANDOM_CHISQUARE
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines