int main(int argc, char *argv[]) { double x = 5.5, y = 3; double a, b; printf("erfc(%lg): %lg, %lg\n", x, erfc(x), kf_erfc(x)); printf("upper-gamma(%lg,%lg): %lg\n", x, y, kf_gammaq(y, x)*tgamma(y)); a = 2; b = 2; x = 0.5; printf("incomplete-beta(%lg,%lg,%lg): %lg\n", a, b, x, kf_betai(a, b, x) / exp(kf_lgamma(a+b) - kf_lgamma(a) - kf_lgamma(b))); return 0; }
static double ttest(int n1, int n2, float a[4]) { extern double kf_betai(double a, double b, double x); double t, v, u1, u2; if (n1 == 0 || n2 == 0 || n1 + n2 < 3) return 1.0; u1 = (double)a[0] / n1; u2 = (double)a[2] / n2; if (u1 <= u2) return 1.; t = (u1 - u2) / sqrt(((a[1] - n1 * u1 * u1) + (a[3] - n2 * u2 * u2)) / (n1 + n2 - 2) * (1./n1 + 1./n2)); v = n1 + n2 - 2; return t < 0.? 1. : .5 * kf_betai(.5*v, .5, v/(v+t*t)); }