blitz Version 0.9
|
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