static VALUE rb_gsl_fit_mul_est(int argc, VALUE *argv, VALUE obj) { double y, yerr, x, c1, c11; int status; switch (argc) { case 2: Need_Float(argv[0]); if (TYPE(argv[1]) == T_ARRAY) { c1 = NUM2DBL(rb_ary_entry(argv[1], 0)); c11 = NUM2DBL(rb_ary_entry(argv[1], 1)); } else { rb_raise(rb_eTypeError, "argv[1]: Array expected"); } x = NUM2DBL(argv[0]); break; case 3: Need_Float(argv[0]); Need_Float(argv[1]); Need_Float(argv[2]); x = NUM2DBL(argv[0]); c1 = NUM2DBL(argv[1]); c11 = NUM2DBL(argv[2]); break; default: rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 3)", argc); break; } status = gsl_fit_mul_est(x, c1, c11, &y, &yerr); return rb_ary_new3(3, rb_float_new(y), rb_float_new(yerr), INT2FIX(status)); }
pure_expr* wrap_gsl_fit_mul_est(double x, double c1, double cov11) { double y, y_err; gsl_fit_mul_est(x, c1, cov11, &y, &y_err); return pure_listl(2, pure_double(y), pure_double(y_err)); }
CAMLprim value ml_gsl_fit_mul_est(value x, value coeffs) { double y,y_err; gsl_fit_mul_est(Double_val(x), Double_field(coeffs, 0), Double_field(coeffs, 1), &y, &y_err); return copy_two_double_arr(y, y_err); }