Geant4  10.00.p03
gammln.cc
Go to the documentation of this file.
1 // $Id:$
2 // -*- C++ -*-
3 //
4 // -----------------------------------------------------------------------
5 // HEP Random
6 // --- HepStat::gammln ---
7 // method implementation file
8 // -----------------------------------------------------------------------
9 
10 // =======================================================================
11 // M. Fischler - moved the gammln from RandPoisson to here. 01/26/00
12 // =======================================================================
13 
14 #include "CLHEP/Random/Stat.h"
15 #include <cmath>
16 
17 namespace CLHEP {
18 
19 double HepStat::gammln(double xx) {
20 
21 // Returns the value ln(Gamma(xx) for xx > 0. Full accuracy is obtained for
22 // xx > 1. For 0 < xx < 1. the reflection formula (6.1.4) can be used first.
23 // (Adapted from Numerical Recipes in C. Relative to that routine, this
24 // subtracts one from x at the very start, and in exchange does not have to
25 // divide ser by x at the end. The results are formally equal, and practically
26 // indistinguishable.)
27 
28  static double cof[6] = {76.18009172947146,-86.50532032941677,
29  24.01409824083091, -1.231739572450155,
30  0.1208650973866179e-2, -0.5395239384953e-5};
31  int j;
32  double x = xx - 1.0;
33  double tmp = x + 5.5;
34  tmp -= (x + 0.5) * std::log(tmp);
35  double ser = 1.000000000190015;
36 
37  for ( j = 0; j <= 5; j++ ) {
38  x += 1.0;
39  ser += cof[j]/x;
40  }
41  return -tmp + std::log(2.5066282746310005*ser);
42 }
43 
44 } // namespace CLHEP
45 
46 
double gammln(double xx)
Definition: RandPoisson.cc:54