inline double dcdflib_nbin_quantile(double p, double r, double sf) { int what = 2; int status = 0; double x, bound, q(1 - p), sfc(1 - sf); cdfnbn(&what, &p, &q, &x, &r, &sf, &sfc, &status, &bound); return x; }
inline double dcdflib_nbin_cdf(double x, double r, double sf) { int what = 1; int status = 0; double p, q, bound, sfc(1 - sf); cdfnbn(&what, &p, &q, &x, &r, &sf, &sfc, &status, &bound); return p; }
void V_cdfnbn(int *which, double *p, double *q, double *s, double *xn, double *pr, double *ompr, int *status, double *bound, int *len) { int i; for (i = 0; i < *len; i++) { cdfnbn((int *)which, &p[i], &q[i], &s[i], &xn[i], &pr[i], &ompr[i], (int *)&status[i], &bound[i]); } }
static int cdf_pnbinom (lua_State *L) { /* stack should contain s, xn, pr */ lua_Number s = luaL_checknumber(L, 1); lua_Number xn = luaL_checknumber(L, 2); lua_Number pr = luaL_checknumber(L, 3); lua_Number p, q, ompr, bound; int which = 1; int status; check_nbinom(L, 1, s, xn, pr); ompr = 1 - pr; cdfnbn(&which, &p, &q, &s, &xn, &pr, &ompr, &status, &bound); check_status(status, bound); lua_pushnumber(L, p); return 1; }
static int cdf_qnbinom (lua_State *L) { /* stack should contain p, xn, pr */ lua_Number p = luaL_checknumber(L, 1); lua_Number xn = luaL_checknumber(L, 2); lua_Number pr = luaL_checknumber(L, 3); int si = 0; check_nbinom(L, 2, p, xn, pr); if (p==1) { lua_pushnumber(L, HUGE_VAL); return 1; } if (p>0) { lua_Number q = 1-p; lua_Number ompr = 1-pr; lua_Number s, bound; int which = 2; int status; cdfnbn(&which, &p, &q, &s, &xn, &pr, &ompr, &status, &bound); check_status(status, bound); lua_number2int(si, s); } lua_pushinteger(L, si); return 1; }