/* Function: esl_rnd_Gamma() * Synopsis: Returns a random deviate from a Gamma(a, 1) distribution. * Incept: SRE, Wed Apr 17 13:10:03 2002 [St. Louis] * * Purpose: Return a random deviate distributed as Gamma(a, 1.) * \citep[pp. 133--134]{Knu-81a}. * * The implementation follows not only Knuth \citep{Knu-81a}, * but also relied on examination of the implementation in * the GNU Scientific Library (libgsl) \citep{Galassi06}. * * Args: r - random number generation seed * a - order of the gamma function; a > 0 * * Throws: <eslEINVAL> for $a <= 0$. */ double esl_rnd_Gamma(ESL_RANDOMNESS *r, double a) { double aint; aint = floor(a); if (a == aint && a < 12.) return gamma_integer(r, (unsigned int) a); else if (a > 3.) return gamma_ahrens(r, a); else if (a < 1.) return gamma_fraction(r, a); else return gamma_integer(r, aint) + gamma_fraction(r, a-aint); return eslOK; }
int main (int argc, char *argv[]) { MPFR_TEST_USE_RANDS (); tests_start_mpfr (); special (); special_overflow (); test_generic (2, 100, 2); gamma_integer (); data_check ("data/gamma", mpfr_gamma, "mpfr_gamma"); tests_end_mpfr (); return 0; }
int main (int argc, char *argv[]) { tests_start_mpfr (); special (); special_overflow (); exprange (); tiny (argc == 1); test_generic (2, 100, 2); gamma_integer (); test20071231 (); test20100709 (); data_check ("data/gamma", mpfr_gamma, "mpfr_gamma"); tests_end_mpfr (); return 0; }