static VALUE rb_gsl_sf_lnchoose_e(VALUE obj, VALUE n, VALUE m) { gsl_sf_result *rslt = NULL; VALUE v; int status; CHECK_FIXNUM(n); CHECK_FIXNUM(m); v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt); status = gsl_sf_lnchoose_e(FIX2INT(n), FIX2INT(m), rslt); return v; }
static VALUE rb_gsl_sf_lnchoose_e(VALUE obj, VALUE n, VALUE m) { gsl_sf_result *rslt = NULL; VALUE v; // local variable "status" declared and set, but never used //int status; CHECK_FIXNUM(n); CHECK_FIXNUM(m); v = Data_Make_Struct(cgsl_sf_result, gsl_sf_result, 0, free, rslt); /*status =*/ gsl_sf_lnchoose_e(FIX2INT(n), FIX2INT(m), rslt); return v; }
/// Log binomial coefficients. double lnchoose(unsigned int n, unsigned int k) { if (k > n) return -std::numeric_limits<double>::infinity(); // GSL barfs on this for no reason. gsl_sf_result result; int stat = gsl_sf_lnchoose_e(n, k, &result); if (stat != GSL_SUCCESS) { std::ostringstream msg("Error in lnchoose:"); msg << " n=" << n << " k=" << k; throw std::runtime_error(msg.str()); } else return result.val; }