124double igam(
double,
double);
125double igamc(
double,
double);
127#define MACHEP DBL_EPSILON
128#define MAXLOG log(FLT_MAX)
131static double big = 4.503599627370496e15;
132static double biginv = 2.22044604925031308085e-16;
134double igamc(
double a,
double x)
136 double ans, ax, c, r, t, y, z;
137 double pkm1, pkm2, qkm1, qkm2;
139 if ((x < 0) || ( a <= 0)) {
140 mtherr(
"igamc", DOMAIN);
144 if ((x < 1.0) || (x < a)) {
145 return(1. - igam(a,x));
147 ax = a * log(x) - x - lgamma(a);
150 mtherr(
"igamc", UNDERFLOW);
171 double pk = pkm1 * z - pkm2 * yc;
172 double qk = qkm1 * z - qkm2 * yc;
176 t = fabs((ans - r) / r);
187 if (fabs(pk) > big) {
210double igam(
double a,
double x)
212 double ans, ax, c, r;
219 if ((x < 0) || (a <= 0)) {
220 mtherr(
"igam", DOMAIN);
224 if ((x > 1.) && (x > a)) {
225 return(1. - igamc(a,x));
229 ax = a * log(x) - x - lgamma(a);
231 mtherr(
"igam", UNDERFLOW);
246 }
while(c/ans > MACHEP);
248 return(ans * ax / a);