/* Gamma inverse cdf */ double icdfGamma (double y, double shape) { double result; result = PointChi2 (y, 2.0*shape)/(2.0*shape); /* to avoid -1.0 */ if (result < 0.0) { result = 0.0; } return result; }
int main(int argc, char*argv[]) { int i,j, n=20, ndf=200, nprob=8, option=0; /* 0:table, 1:prob */ double df,chi2, d=1.0/n, prob[]= {.005, .025, .1, .5, .90, .95, .99, .999}; option=(argc>1); if (option) { for (; ; ) { printf ("\nd.f. & Chi^2 value (Ctrl-c to break)? "); scanf ("%lf%lf", &df, &chi2); if(df<1 || chi2<0) break; prob[0]=1-CDFChi2(chi2,df); printf ("\nprob = %.9f = %.3e\n", prob[0],prob[0]); } } else { printf ("\n\nChi-square critical values\n"); for (i=0; i<ndf; i++) { if (i%15==0) { printf ("\n\t\t\t\tSignificance level\n"); printf ("\n DF "); for (j=0; j<nprob; j++) printf ("%9.4f", 1-prob[j]); printf ("\n"); } printf ("\n%3d ", i+1); for (j=0; j<nprob; j++) printf ("%9.4f", PointChi2(prob[j],(double)(i+1))); if (i%5==4) printf ("\n"); if (i%15==14) { printf ("\nENTER for more, (q+ENTER) for quit... "); if (getchar()=='q') break; } } } printf ("\n"); return (0); }