Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
/// 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;
}