68 static const double con[8] = {
69 76.18009172947146, -86.50532032941677, 24.01409824083091,
70 -1.231739572450155, 1.208650973866179e-3, -5.395239384953e-6,
71 1.000000000190015, 2.5066282746310005};
80 t -= (x + 0.5) *
::log(t);
82 for (
int i = 0; i <= 5; i++)
85 return (-t + ::
log(con[7] * s / x));
102 return ::exp(
lnGamma(
double(x)));
125 return ::exp(
lnGamma(
double(n + 1)));
128 static double store[33] = {1.0, 1.0, 2.0, 6.0, 24.0, 120.0};
129 static int nstore = 5;
134 store[nstore] = store[i] * nstore;
235 static const int imax(1000);
236 static const double eps(10 * std::numeric_limits<double>().epsilon());
240 double atmp(a),
sum(1.0 / a);
242 for (
int i = 1; i <= imax; i++)
247 if (::fabs(del) < ::fabs(
sum) * eps)
249 return (
sum * ::exp(-x + a * ::
log(x) - lngamma));
281 static const int imax(1000);
282 static const double eps(10 * std::numeric_limits<double>().epsilon());
283 static const double fpmin(10 * std::numeric_limits<double>().
min());
287 double b(x + 1.0 - a), c(1.0 / fpmin);
291 for (i = 1; i <= imax; i++)
293 double an(-i * (i - a));
296 if (::fabs(d) < fpmin)
301 if (::fabs(c) < fpmin)
308 if (::fabs(del - 1.0) < eps)
319 return (::exp(-x + a * ::
log(x) - lngamma) * h);
436 static const int imax(1000);
437 static const double eps(10 * std::numeric_limits<double>().epsilon());
438 static const double fpmin(10 * std::numeric_limits<double>().
min());
439 const double qab(a + b);
440 const double qap(a + 1.0);
441 const double qam(a - 1.0);
442 double c(1), d(1 - qab * x / qap), aa, del;
443 if (::fabs(d) < fpmin)
450 for (i = 1; i <= imax; i++)
453 aa = i * (b - i) * x / ((qam + i2) * (a + i2));
455 if (::fabs(d) < fpmin)
460 if (::fabs(c) < fpmin)
466 aa = -(a + i) * (qab + i) * x / ((a + i2) * (qap + i2));
468 if (::fabs(d) < fpmin)
473 if (::fabs(c) < fpmin)
480 if (::fabs(del - 1.0) < eps)
505 if (a <= 0 || b <= 0)
522 a * ::
log(x) + b * ::
log(1.0 - x));
523 if (x < (a + 1.0) / (a + b + 2.0))
525 return factor *
cfIBeta(x, a, b) / a;
529 return 1.0 - factor *
cfIBeta(1.0 - x, b, a) / b;
574 return (::exp(-(x -
mu) * (x -
mu) / (2.0 * sig * sig)));
597 static const double sqrt2(::sqrt(2.0));
600 return (0.5 * (1.0 + (
arg < 0.0 ? -erf : erf)));
619 if (prob < 0 || prob >= 1)
628 static const double eps(1000000 *
629 std::numeric_limits<double>().epsilon());
635 if (1.0 - prob < eps)
653 double X, X0(
mu), X1, a;
674 if (::fabs(alpha - a) < eps)
692 return (swap ? 2.0 *
mu - X : X);
745 double dn(
double(n) / 2.0);
746 return (::exp(-x / 2.0) * ::pow(x, dn - 1.0) /
747 (::pow(2.0, dn) *
Gamma(dn)));
793 if (alpha < 0 || alpha >= 1)
802 static const double eps(1000000 *
803 std::numeric_limits<double>().epsilon());
808 if (1.0 - alpha < eps)
815 double X, X0(0.0), X1, a;
818 while ((a =
ChisqCDF(X1, n)) <= alpha)
836 if (::fabs(alpha - a) < eps)
900 return (::pow(1.0 + X * X / dn, -(dn + 1) / 2.0) /
901 (::sqrt(dn) *
beta(0.5, 0.5 * dn)));
954 if (prob < 0 || prob >= 1)
963 static const double eps(1000000 *
964 std::numeric_limits<double>().epsilon());
969 if (1.0 - prob < eps)
986 double t, t0(0.0), t1, a;
1007 if (::fabs(alpha - a) < eps)
1025 return (swap ? -t : t);
1056 if (n1 <= 0 || n2 <= 0)
1065 double(n2) / 2.0,
double(n1) / 2.0));
1107 double dn1(n1), dn2(n2);
1110 F *= ::pow(dn1 / dn2, dn1 / 2.0) * ::pow(x, dn1 / 2.0 - 1.0);
1111 F /= ::pow(1.0 + x * dn1 / dn2, (dn1 + dn2) / 2.0);
1131 if (prob < 0 || prob >= 1)
1135 if (n1 <= 0 || n2 <= 0)
1140 static const double eps(100000 *
1141 std::numeric_limits<double>().epsilon());
1146 if (1.0 - prob < eps)
1166 double F, F0(0.0), F1, a;
1169 while ((a =
FDistCDF(F1, N1, N2)) <= alpha)
1178 F = (F0 + F1) / 2.0;
1186 if (::fabs(alpha - a) < eps)
1205 return (swap ? 1.0 / F : F);