inline double dcdflib_beta_quantile(double p, double a, double b) { int what = 2; int status = 0; double x, y, bound, q(1 - p); cdfbet(&what, &p, &q, &x, &y, &a, &b, &status, &bound); return x; }
inline double dcdflib_beta_cdf(double x, double a, double b) { int what = 1; int status = 0; double p, q, bound, y(1-x); cdfbet(&what, &p, &q, &x, &y, &a, &b, &status, &bound); return p; }
void V_cdfbet(int *which, double *p, double *q, double *x, double *y, double *a, double *b, int *status, double *bound, int *len) { int i; for (i = 0; i < *len; i++) { cdfbet((int *)which, &p[i], &q[i], &x[i], &y[i], &a[i], &b[i], (int *)&status[i], &bound[i]); } }
static int cdf_pbeta (lua_State *L) { /* stack should contain x, a and b */ lua_Number x = luaL_checknumber(L, 1); lua_Number a = luaL_checknumber(L, 2); lua_Number b = luaL_checknumber(L, 3); lua_Number p, q, y, bound; int which = 1; int status; check_beta(L, 1, x, a, b); y = 1-x; cdfbet(&which, &p, &q, &x, &y, &a, &b, &status, &bound); check_status(status, bound); lua_pushnumber(L, p); return 1; }
static int cdf_qbeta (lua_State *L) { /* stack should contain x, a and b */ lua_Number p = luaL_checknumber(L, 1); lua_Number a = luaL_checknumber(L, 2); lua_Number b = luaL_checknumber(L, 3); lua_Number x; check_beta(L, 2, p, a, b); if (p==0 || p==1) x = p; else { lua_Number q, y, bound; int which = 2; int status; q = 1-p; cdfbet(&which, &p, &q, &x, &y, &a, &b, &status, &bound); check_status(status, bound); } lua_pushnumber(L, x); return 1; }