CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GammaSeries.cc
Go to the documentation of this file.
2 #include <iostream>
3 #include <cmath>
4 
5 #define ITMAX 100 // maximum allowed number of iterations
6 #define EPS 3.0e-7 // relative accuracy
7 
8 float GammaSeries( float a, float x )
9 {
10  if( x < 0.0 )
11  std::cerr << "GammaSeries::negative argument x" << std::endl;
12 
13  if( x == 0. )
14  return 0.;
15 
16  // coefficient c_n of x^n is Gamma(a)/Gamma(a+1+n), which leads to the
17  // recurrence relation c_n = c_(n-1) / (a+n-1) with c_0 = 1/a
18  double term = 1/a;
19  double sum = term;
20  double aplus = a;
21  for( int index = 1; index <= ITMAX; index++) {
22  ++aplus;
23  term *= x/aplus;
24  sum += term;
25  if( fabs(term) < fabs(sum)*EPS )
26  // global coefficient e^-x * x^a / Gamma(a)
27  return sum;
28  }
29  std::cerr << "GammaSeries::a too large, ITMAX too small" << std::endl;
30  return 0.;
31 }
32 
#define ITMAX
Definition: GammaSeries.cc:5
#define EPS
Definition: GammaSeries.cc:6
double a
Definition: hdecay.h:121
float GammaSeries(float a, float x)
Definition: GammaSeries.cc:8
x
Definition: VDTMath.h:216