double gsl_cdf_tdist_Q (const double x, const double nu) { double Q; double x2 = x * x; if (nu > 30 && x2 < 10 * nu) { double u = cornish_fisher (x, nu); Q = gsl_cdf_ugaussian_Q (u); return Q; } if (x2 < nu) { double u = x2 / nu; double eps = u / (1 + u); if (x >= 0) { Q = beta_inc_AXPY (-0.5, 0.5, 0.5, nu / 2.0, eps); } else { Q = beta_inc_AXPY (0.5, 0.5, 0.5, nu / 2.0, eps); } } else { double v = nu / (x * x); double eps = v / (1 + v); if (x >= 0) { Q = beta_inc_AXPY (0.5, 0.0, nu / 2.0, 0.5, eps); } else { Q = beta_inc_AXPY (-0.5, 1.0, nu / 2.0, 0.5, eps); } } return Q; }
double gsl_cdf_fdist_Q (const double x, const double nu1, const double nu2) { double Q; double r = nu2 / nu1; if (x < r) { double u = x / (r + x); Q = beta_inc_AXPY (-1.0, 1.0, nu1 / 2.0, nu2 / 2.0, u); } else { double u = r / (r + x); Q = beta_inc_AXPY (1.0, 0.0, nu2 / 2.0, nu1 / 2.0, u); } return Q; }
double gsl_cdf_beta_Q (const double x, const double a, const double b) { double Q; if ( x >= 1.0) { return 0.0; } if ( x <= 0.0 ) { return 1.0; } Q = beta_inc_AXPY (-1.0, 1.0, a, b, x); return Q; }
double gsl_cdf_beta_P (const double x, const double a, const double b) { double P; if (x <= 0.0 ) { return 0.0; } if ( x >= 1.0 ) { return 1.0; } P = beta_inc_AXPY (1.0, 0.0, a, b, x); return P; }