Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/src/gammln.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

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