double *cut_points(double fac, int n) { /* return the n+1 cutpoints between -fac...fac, that makes n regions of equal probability */ static double fac_save = 0.0; static int n_save = 0; static double *cp = NULL; double p_left, p, q, mean=0.0, sd=1.0, bound, x; int i, iwhich, status; if (fac == fac_save && n == n_save) return cp; fac_save = fac; n_save = n; FREE(cp); cp = Calloc(n+1, double); iwhich = 1; cdfnor_(&iwhich, &p, &q, &fac, &mean, &sd, &status, &bound); p_left = q; cp[0] = -fac; cp[n] = fac; for(i=1;i<n;i++) { iwhich = 2; p = p_left + i/((double)n)*(1.0 - 2.0*p_left); q = 1.0 -p; cdfnor_(&iwhich, &p, &q, &x, &mean, &sd, &status, &bound); cp[i] = x; } if (0) { for(i=0;i<n+1;i++) printf("cutpoint %d %f\n", i, cp[i]); } return cp; }
double ccdfnor(double *x, double *para) { return cdfnor_(x, para); }