CMS 3D CMS Logo

GammaContinuedFraction.cc
Go to the documentation of this file.
2 #include <cmath>
3 #include <iostream>
4 
5 #define ITMAX 100 // maximum allowed number of iterations
6 #define EPS 3.0e-7 // relative accuracy
7 #define FPMIN 1.0e-30 // number near the smallest representable floating-point number
8 
9 float GammaContinuedFraction(float a, float x) {
10  int i;
11  float an, del;
12 
13  /* Set up for evaluating continued fraction by modified Lentz's method (par.5.2
14  in Numerical Recipes in C) with b_0 = 0 */
15  double b = x + 1.0 - a;
16  double c = 1.0 / FPMIN;
17  double d = 1.0 / b;
18  double h = d;
19  for (i = 1; i <= ITMAX; i++) {
20  an = -i * (i - a);
21  b += 2.0;
22  d = an * d + b;
23  if (fabs(d) < FPMIN)
24  d = FPMIN;
25  c = b + an / c;
26  if (fabs(c) < FPMIN)
27  c = FPMIN;
28  d = 1.0 / d;
29  del = d * c;
30  h *= del;
31  if (fabs(del - 1.0) < EPS)
32  break;
33  }
34  if (i > ITMAX)
35  std::cerr << "GammaContinuedFraction::a too large, "
36  << "ITMAX too small" << std::endl;
37  return h;
38 }
39 #undef ITMAX
40 #undef EPS
41 #undef FPMIN
42 /* (C) Copr. 1986-92 Numerical Recipes Software B2.. */
mps_fire.i
i
Definition: mps_fire.py:428
GammaContinuedFraction.h
FPMIN
#define FPMIN
Definition: GammaContinuedFraction.cc:7
h
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
EPS
#define EPS
Definition: GammaContinuedFraction.cc:6
h
b
double b
Definition: hdecay.h:118
a
double a
Definition: hdecay.h:119
ITMAX
#define ITMAX
Definition: GammaContinuedFraction.cc:5
genVertex_cff.x
x
Definition: genVertex_cff.py:13
ztail.d
d
Definition: ztail.py:151
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:56
EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.cerr
cerr
Definition: EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.py:8
GammaContinuedFraction
float GammaContinuedFraction(float a, float x)
Definition: GammaContinuedFraction.cc:9