00001
00002
00003
00004
00005
00006
00007
00008
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