ext/mpfr/ruby_mpfr.c in ruby-mpfr-0.0.12 vs ext/mpfr/ruby_mpfr.c in ruby-mpfr-0.0.13
- old
+ new
@@ -10,11 +10,11 @@
#define MPFR_P(obj) RTEST(rb_funcall(__mpfr_class__, eqq, 1, obj))
static ID eqq, to_s, new, class, method_defined, object_id, to_fr,
id_rndn, id_rndz, id_rndu, id_rndd, id_rnda;
-static VALUE __mpfr_class__, __sym_to_s__, __sym_to_str__;
+static VALUE __mpfr_class__, __sym_to_s__, __sym_to_str__, __mpfr_domain_error__;
/* ------------------------------ Precision and Rounding Mode Start ------------------------------ */
#define VALID_RND(rnd_mode) (rnd_mode >= MPFR_RNDN && rnd_mode < ((MPFR_RNDA)+1))
#define SPECIAL_FUNC_STATE "@@special_func_state"
@@ -638,12 +638,13 @@
/* Arguments are val, rnd, and prec. Set the value of self from val. rnd and prec are optional.*/
static VALUE r_mpfr_set(int argc, VALUE *argv, VALUE self)
{
MPFR *ptr_self;
+ mp_rnd_t rnd;
r_mpfr_get_struct(ptr_self, self);
- mp_rnd_t rnd = r_mpfr_rnd_from_optional_argument(1, 2, argc, argv);
+ rnd = r_mpfr_rnd_from_optional_argument(1, 2, argc, argv);
r_mpfr_set_robj(ptr_self, argv[0], rnd);
return self;
}
/*
@@ -651,12 +652,13 @@
Set the value of self from val. rnd and prec are optional.
*/
static VALUE r_mpfr_set_fixnum_2exp(int argc, VALUE *argv, VALUE self)
{
MPFR *ptr_self;
+ mp_rnd_t rnd;
r_mpfr_get_struct(ptr_self, self);
- mp_rnd_t rnd = r_mpfr_rnd_from_optional_argument(2, 3, argc, argv);
+ rnd = r_mpfr_rnd_from_optional_argument(2, 3, argc, argv);
mpfr_set_si_2exp(ptr_self, NUM2INT(argv[0]), NUM2INT(argv[1]), rnd);
return self;
}
/*
@@ -715,46 +717,49 @@
/* Output self by mpfr_asprintf( some_val, p1, self ). For example, p1 are "%.Re", "%.Rf" or "%.30Re" etc. */
static VALUE r_mpfr_to_strf(VALUE self, VALUE format_str)
{
MPFR *ptr_self;
+ char *format, *ret_str;
+ VALUE ret_val;
r_mpfr_get_struct(ptr_self, self);
- char *format = StringValuePtr(format_str);
- char *ret_str;
+ format = StringValuePtr(format_str);
if (!mpfr_asprintf(&ret_str, format, ptr_self)) {
rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
}
- VALUE ret_val = rb_str_new2(ret_str);
+ ret_val = rb_str_new2(ret_str);
mpfr_free_str(ret_str);
return ret_val;
}
/* Convert to string. */
static VALUE r_mpfr_to_s(VALUE self)
{
MPFR *ptr_self;
- r_mpfr_get_struct(ptr_self, self);
char *ret_str;
+ VALUE ret_val;
+ r_mpfr_get_struct(ptr_self, self);
if (!mpfr_asprintf(&ret_str, "%.Re", ptr_self)) {
rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
}
- VALUE ret_val = rb_str_new2(ret_str);
+ ret_val = rb_str_new2(ret_str);
mpfr_free_str(ret_str);
return ret_val;
}
/* Output for debugging. */
static VALUE r_mpfr_inspect(VALUE self)
{
MPFR *ptr_s;
- r_mpfr_get_struct(ptr_s, self);
char *ret_str;
+ VALUE ret_val;
+ r_mpfr_get_struct(ptr_s, self);
if (!mpfr_asprintf(&ret_str, "#<MPFR:%lx,'%0.Re',%d>", NUM2LONG(rb_funcall(self, object_id, 0)),
ptr_s, mpfr_get_prec(ptr_s))) {
rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
}
- VALUE ret_val = rb_str_new2(ret_str);
+ ret_val = rb_str_new2(ret_str);
mpfr_free_str(ret_str);
return ret_val;
}
/* ------------------------------ Methods related to string End ------------------------------ */
@@ -772,64 +777,123 @@
/* Return array having Float object d and Fixnum object i such that 0.5 <= abs(d) < 1.0 and */
/* d times 2 raised to exp equals self rounded to double precision. See MPFR reference for detail. */
static VALUE r_mpfr_get_d_2exp(int argc, VALUE *argv, VALUE self)
{
MPFR *ptr_self;
- r_mpfr_get_struct(ptr_self, self);
+ double ret_val1;
long int ret_val2;
- double ret_val1 = mpfr_get_d_2exp(&ret_val2, ptr_self, r_mpfr_rnd_from_optional_argument(0, 1, argc, argv));
- return rb_ary_new3(2, rb_float_new(ret_val1), INT2NUM(ret_val2));
-}
-
-/* Return Fixnum object converted after rounding self with respect to rnd which is optional argument. */
-static VALUE r_mpfr_get_si(int argc, VALUE *argv, VALUE self)
-{
- MPFR *ptr_self;
r_mpfr_get_struct(ptr_self, self);
- return INT2NUM(mpfr_get_si(ptr_self, r_mpfr_rnd_from_optional_argument(0, 1, argc, argv)));
+ ret_val1 = mpfr_get_d_2exp(&ret_val2, ptr_self, r_mpfr_rnd_from_optional_argument(0, 1, argc, argv));
+ return rb_ary_new3(2, rb_float_new(ret_val1), LONG2NUM(ret_val2));
}
/* Return Fixnum object which is nearest integer to self. */
static VALUE r_mpfr_round_to_i(VALUE self)
{
MPFR *ptr_self;
r_mpfr_get_struct(ptr_self, self);
- return INT2NUM(mpfr_get_si(ptr_self, GMP_RNDN));
+ if (mpfr_fits_slong_p(ptr_self, GMP_RNDN)) {
+ return LONG2NUM(mpfr_get_si(ptr_self, GMP_RNDN));
+ } else if (mpfr_nan_p(ptr_self)) {
+ rb_raise(__mpfr_domain_error__, "Can not convert NaN to an integer");
+ } else {
+ MPFR *tmp_int;
+ char *tmp_str;
+ VALUE bignum;
+ r_mpfr_temp_alloc_init2(tmp_int, mpfr_get_prec(ptr_self));
+ mpfr_round(tmp_int, ptr_self);
+ if (!mpfr_asprintf(&tmp_str, "%Rf", tmp_int)) {
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
+ }
+ bignum = rb_cstr_to_inum(tmp_str, 10, false);
+ r_mpfr_temp_free(tmp_int);
+ return bignum;
+ }
}
/* Return Fixnum object which is the minimum integer over self. */
static VALUE r_mpfr_ceil_to_i(VALUE self)
{
MPFR *ptr_self;
r_mpfr_get_struct(ptr_self, self);
- return INT2NUM(mpfr_get_si(ptr_self, GMP_RNDU));
+ if (mpfr_fits_slong_p(ptr_self, GMP_RNDU)) {
+ return LONG2NUM(mpfr_get_si(ptr_self, GMP_RNDU));
+ } else if (mpfr_nan_p(ptr_self)) {
+ rb_raise(__mpfr_domain_error__, "Can not convert NaN to an integer");
+ } else {
+ MPFR *tmp_int;
+ char *tmp_str;
+ VALUE bignum;
+ r_mpfr_temp_alloc_init2(tmp_int, mpfr_get_prec(ptr_self));
+ mpfr_ceil(tmp_int, ptr_self);
+ if (!mpfr_asprintf(&tmp_str, "%Rf", tmp_int)) {
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
+ }
+ bignum = rb_cstr_to_inum(tmp_str, 10, false);
+ r_mpfr_temp_free(tmp_int);
+ return bignum;
+ }
}
/* Return Fixnum object which is the maximum integer not over self. */
static VALUE r_mpfr_floor_to_i(VALUE self)
{
MPFR *ptr_self;
r_mpfr_get_struct(ptr_self, self);
- return INT2NUM(mpfr_get_si(ptr_self, GMP_RNDD));
+ if (mpfr_fits_slong_p(ptr_self, GMP_RNDD)) {
+ return LONG2NUM(mpfr_get_si(ptr_self, GMP_RNDD));
+ } else if (mpfr_nan_p(ptr_self)) {
+ rb_raise(__mpfr_domain_error__, "Can not convert NaN to an integer");
+ } else {
+ MPFR *tmp_int;
+ char *tmp_str;
+ VALUE bignum;
+ r_mpfr_temp_alloc_init2(tmp_int, mpfr_get_prec(ptr_self));
+ mpfr_floor(tmp_int, ptr_self);
+ if (!mpfr_asprintf(&tmp_str, "%Rf", tmp_int)) {
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
+ }
+ bignum = rb_cstr_to_inum(tmp_str, 10, false);
+ r_mpfr_temp_free(tmp_int);
+ return bignum;
+ }
}
/* Return Fixnum object by truncating self. */
static VALUE r_mpfr_truncate_to_i(VALUE self)
{
MPFR *ptr_self;
r_mpfr_get_struct(ptr_self, self);
- return INT2NUM(mpfr_get_si(ptr_self, GMP_RNDZ));
+ if (mpfr_fits_slong_p(ptr_self, GMP_RNDZ)) {
+ return LONG2NUM(mpfr_get_si(ptr_self, GMP_RNDZ));
+ } else if (mpfr_nan_p(ptr_self)) {
+ rb_raise(__mpfr_domain_error__, "Can not convert NaN to an integer");
+ } else {
+ MPFR *tmp_int;
+ char *tmp_str;
+ VALUE bignum;
+ r_mpfr_temp_alloc_init2(tmp_int, mpfr_get_prec(ptr_self));
+ mpfr_trunc(tmp_int, ptr_self);
+ if (!mpfr_asprintf(&tmp_str, "%Rf", tmp_int)) {
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
+ }
+ bignum = rb_cstr_to_inum(tmp_str, 10, false);
+ r_mpfr_temp_free(tmp_int);
+ return bignum;
+ }
}
/* Return array having String object meaning mantissa and Fixnum object meaning exponent. See MPFR reference for detail. */
static VALUE r_mpfr_get_str(VALUE self)
{
MPFR *ptr_self;
- r_mpfr_get_struct(ptr_self, self);
mp_exp_t e;
- char *str = mpfr_get_str(NULL, &e, 10, 0, ptr_self, GMP_RNDN);
- VALUE ret_str = rb_str_new2(str);
+ char *str;
+ VALUE ret_str;
+ r_mpfr_get_struct(ptr_self, self);
+ str = mpfr_get_str(NULL, &e, 10, 0, ptr_self, GMP_RNDN);
+ ret_str = rb_str_new2(str);
mpfr_free_str(str);
return rb_ary_new3(2, ret_str, INT2FIX((int)e));
}
/* ------------------------------ Conversion functions End ------------------------------ */
@@ -972,13 +1036,13 @@
/* Return negative value of self. */
static VALUE r_mpfr_neg(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_neg(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -986,13 +1050,13 @@
/* Return absolute value of self. */
static VALUE r_mpfr_abs(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_abs(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1004,14 +1068,15 @@
/* This method needs two required arguments and returns p1 + p2. */
static VALUE r_mpfr_math_add(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(MPFR_P(argv[1])){
r_mpfr_get_struct(ptr_arg2, argv[1]);
@@ -1028,14 +1093,15 @@
/* This method needs two required arguments and returns p1 - p2. */
static VALUE r_mpfr_math_sub(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(MPFR_P(argv[1])){
r_mpfr_get_struct(ptr_arg2, argv[1]);
@@ -1052,14 +1118,15 @@
/* This method needs two required arguments and returns p1 - p2. */
static VALUE r_mpfr_math_mul(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(MPFR_P(argv[1])){
r_mpfr_get_struct(ptr_arg2, argv[1]);
@@ -1076,14 +1143,15 @@
/* This method needs two required arguments and returns p1 / p2. */
static VALUE r_mpfr_math_div(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(MPFR_P(argv[1])){
r_mpfr_get_struct(ptr_arg2, argv[1]);
@@ -1100,14 +1168,15 @@
/* mpfr_sqr(ret, p1, rnd). */
static VALUE r_mpfr_math_sqr(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_sqr(ptr_return, ptr_arg1, rnd);
return val_ret;
}
@@ -1115,13 +1184,13 @@
/* mpfr_sqrt(ret, p1, rnd). */
static VALUE r_mpfr_math_sqrt(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(TYPE(argv[0]) == T_FIXNUM){
long num = FIX2LONG(argv[0]);
if(num >= 0){
@@ -1140,14 +1209,15 @@
/* mpfr_rec_sqrt(ret, p1, rnd). */
static VALUE r_mpfr_math_rec_sqrt(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rec_sqrt(ptr_return, ptr_arg1, rnd);
return val_ret;
}
@@ -1155,14 +1225,15 @@
/* mpfr_cbrt(ret, p1, rnd). */
static VALUE r_mpfr_math_cbrt(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_cbrt(ptr_return, ptr_arg1, rnd);
return val_ret;
}
@@ -1170,17 +1241,19 @@
/* mpfr_root(ret, p1, rnd). */
static VALUE r_mpfr_math_root(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ int root;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- int root = NUM2INT(argv[1]);
+ root = NUM2INT(argv[1]);
if(root > 0){
mpfr_root(ptr_return, ptr_arg1, root, rnd);
}else{
rb_raise(rb_eArgError, "Second argument must be positive Fixnum.");
}
@@ -1190,14 +1263,15 @@
/* mpfr_pow(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_pow(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg0, *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg0, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(TYPE(argv[1]) == T_FIXNUM){
mpfr_pow_si(ptr_return, ptr_arg0, FIX2LONG(argv[1]), rnd);
}else{
@@ -1211,16 +1285,17 @@
/* mpfr_dim(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_dim(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg0, *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg0, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg1, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_dim(ptr_return, ptr_arg0, ptr_arg1, rnd);
return val_ret;
}
@@ -1228,14 +1303,15 @@
/* mpfr_mul_2si(ret, p1, p2, rnd). p2 must be integer. */
static VALUE r_mpfr_math_mul_2si(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg0, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg0, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_mul_2si(ptr_return, ptr_arg0, NUM2INT(argv[1]), rnd);
return val_ret;
}
@@ -1243,14 +1319,15 @@
/* mpfr_div_2si(ret, p1, p2, rnd). p2 must be integer. */
static VALUE r_mpfr_math_div_2si(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg0, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg0, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_div_2si(ptr_return, ptr_arg0, NUM2INT(argv[1]), rnd);
return val_ret;
}
@@ -1261,12 +1338,12 @@
/* Return negative integer if self < other, negative integer if self > other, or 0 if self == other. */
static VALUE r_mpfr_cmp(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
- r_mpfr_get_struct(ptr_self, self);
int val_ret;
+ r_mpfr_get_struct(ptr_self, self);
if(MPFR_P(other)){
r_mpfr_get_struct(ptr_other, other);
val_ret = mpfr_cmp(ptr_self, ptr_other);
}else if(TYPE(other) == T_FIXNUM){
@@ -1285,13 +1362,14 @@
/* mpfr_cmp_ui_2exp(self, p1, p2). */
static VALUE r_mpfr_cmp_ui_2exp(VALUE self, VALUE other, VALUE exp)
{
MPFR *ptr_self;
- r_mpfr_get_struct(ptr_self, self);
VALUE val_ret;
- int i = NUM2INT(other);
+ int i;
+ r_mpfr_get_struct(ptr_self, self);
+ i = NUM2INT(other);
if(i > 0){
val_ret = INT2FIX(mpfr_cmp_ui_2exp(ptr_self, i, (mp_exp_t)NUM2INT(exp)));
}else{
rb_raise(rb_eArgError, "First argument must be positive Fixnum.");
}
@@ -1308,12 +1386,13 @@
/* mpfr_cmpabs(self, p1). */
static VALUE r_mpfr_cmpabs(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return INT2FIX(mpfr_cmpabs(ptr_self, ptr_other));
}
/* Return true if self is NaN, nil otherwise. */
@@ -1390,72 +1469,79 @@
/* Return true if self > other, nil otherwise. */
static VALUE r_mpfr_greater_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_greater_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self >= other, nil otherwise. */
static VALUE r_mpfr_greaterequal_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_greaterequal_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self < other, nil otherwise. */
static VALUE r_mpfr_less_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_less_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self <= other, nil otherwise. */
static VALUE r_mpfr_lessequal_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_lessequal_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self < other or self > other, nil otherwise. */
static VALUE r_mpfr_lessgreater_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_lessgreater_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self == other, nil otherwise. */
static VALUE r_mpfr_equal_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_equal_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* Return true if self or other is a NaN, nil otherwise */
static VALUE r_mpfr_unordered_p(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
return (mpfr_unordered_p(ptr_self, ptr_other) != 0 ? Qtrue : Qfalse);
}
/* ------------------------------ Comparison Functions End ------------------------------ */
@@ -1465,13 +1551,13 @@
/* mpfr_rint(ret, self, rnd) */
static VALUE r_mpfr_fr_rint(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rint(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1527,13 +1613,13 @@
/* mpfr_rint_ceil(ret, self, rnd) */
static VALUE r_mpfr_rint_ceil(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rint_ceil(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1541,13 +1627,13 @@
/* mpfr_rint_floor(ret, self, rnd) */
static VALUE r_mpfr_rint_floor(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rint_floor(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1555,13 +1641,13 @@
/* mpfr_rint_round(ret, self, rnd) */
static VALUE r_mpfr_rint_round(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rint_round(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1569,13 +1655,13 @@
/* mpfr_rint_trunc(ret, self, rnd) */
static VALUE r_mpfr_rint_trunc(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_rint_trunc(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1583,13 +1669,13 @@
/* mpfr_frac(ret, self, rnd) */
static VALUE r_mpfr_frac(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_frac(ptr_return, ptr_self, rnd);
return val_ret;
}
@@ -1597,13 +1683,13 @@
/* Return [ret1, ret2] such that mpfr_modf(ret1, ret2, self, rnd). */
static VALUE r_mpfr_modf(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return1, *ptr_return2;
VALUE val_ret1, val_ret2;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret1, ptr_return1, prec);
r_mpfr_make_struct_init2(val_ret2, ptr_return2, prec);
mpfr_modf(ptr_return1, ptr_return2, ptr_self, rnd);
return rb_ary_new3(2, val_ret1, val_ret2);
@@ -1612,62 +1698,66 @@
/* mpfr_fmod(ret, self, p1, rnd) */
static VALUE r_mpfr_fmod(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_self, *ptr_other, *ptr_return;
VALUE val_ret;
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_other, tmp_argv0);
mpfr_fmod(ptr_return, ptr_self, ptr_other, rnd);
return val_ret;
}
/* mpfr_remainder(ret, self, p1, rnd) */
static VALUE r_mpfr_remainder(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_self, *ptr_other, *ptr_return;
VALUE val_ret;
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_other, tmp_argv0);
mpfr_remainder(ptr_return, ptr_self, ptr_other, rnd);
return val_ret;
}
/* mpfr_remainder(ret, self, p1, mpfr_getdefault_rounding_mode()) */
static VALUE r_mpfr_remainder2(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other, *ptr_return;
+ volatile VALUE tmp_other;
VALUE val_ret;
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init(val_ret, ptr_return);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
mpfr_remainder(ptr_return, ptr_self, ptr_other, mpfr_get_default_rounding_mode());
return val_ret;
}
/* mpfr_remquo(ret1, ret2, self, p1, rnd) */
static VALUE r_mpfr_remquo(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_self, *ptr_other, *ptr_return;
VALUE val_ret;
long q;
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_other, tmp_argv0);
mpfr_remquo(ptr_return, &q, ptr_self, ptr_other, rnd);
return rb_ary_new3(2, val_ret, LONG2FIX(q));
}
@@ -1685,12 +1775,13 @@
/* mpfr_nexttoward(self, p1) */
static VALUE r_mpfr_nexttoward(VALUE self, VALUE other)
{
MPFR *ptr_self, *ptr_other;
+ volatile VALUE tmp_other;
r_mpfr_get_struct(ptr_self, self);
- volatile VALUE tmp_other = r_mpfr_new_fr_obj(other);
+ tmp_other = r_mpfr_new_fr_obj(other);
r_mpfr_get_struct(ptr_other, tmp_other);
mpfr_nexttoward(ptr_self, ptr_other);
return self;
}
@@ -1726,12 +1817,13 @@
/* arg_exp is integer and we execute mpfr_set_exp(self, arg_exp). */
static VALUE r_mpfr_set_exp(VALUE self, VALUE arg_exp)
{
MPFR *ptr_self;
+ mp_exp_t exp;
r_mpfr_get_struct(ptr_self, self);
- mp_exp_t exp = NUM2INT(arg_exp);
+ exp = NUM2INT(arg_exp);
mpfr_set_exp(ptr_self, exp);
return self;
}
/* Return integer which is mpfr_signbit(self). */
@@ -1745,31 +1837,33 @@
/* mpfr_setsign(ret, self, p1, rnd) */
static VALUE r_mpfr_setsign(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ int s;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- int s = NUM2INT(argv[0]);
+ s = NUM2INT(argv[0]);
mpfr_setsign(ptr_return, ptr_self, s, rnd);
return val_ret;
}
/* mpfr_copysign(ret, self, p1, rnd) */
static VALUE r_mpfr_copysign(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_self, *ptr_return, *ptr_arg;
VALUE val_ret;
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg, tmp_argv0);
mpfr_copysign(ptr_return, ptr_self, ptr_arg, rnd);
return val_ret;
}
@@ -1780,13 +1874,13 @@
/* mpfr_prec_round(ret, prec, rnd) */
static VALUE r_mpfr_prec_round(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
r_mpfr_make_struct_init2(val_ret, ptr_return, mpfr_get_prec(ptr_self));
mpfr_set(ptr_return, ptr_self, mpfr_get_default_prec());
mpfr_prec_round(ptr_return, prec, rnd);
return val_ret;
@@ -1795,12 +1889,12 @@
/* mpfr_prec_round(self, prec, rnd) */
static VALUE r_mpfr_prec_round2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_self;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_get_struct(ptr_self, self);
mpfr_prec_round(ptr_self, prec, rnd);
return self;
}
@@ -1847,14 +1941,15 @@
/* mpfr_log(ret, p1, rnd). */
static VALUE r_mpfr_math_log(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_log(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1862,14 +1957,15 @@
/* mpfr_log2(ret, p1, rnd). */
static VALUE r_mpfr_math_log2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_log2(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1877,14 +1973,15 @@
/* mpfr_log10(ret, p1, rnd). */
static VALUE r_mpfr_math_log10(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_log10(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1892,14 +1989,15 @@
/* mpfr_exp(ret, p1, rnd). */
static VALUE r_mpfr_math_exp(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_exp(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1907,14 +2005,15 @@
/* mpfr_exp2(ret, p1, rnd). */
static VALUE r_mpfr_math_exp2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_exp2(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1922,14 +2021,15 @@
/* mpfr_exp10(ret, p1, rnd). */
static VALUE r_mpfr_math_exp10(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_exp10(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1937,14 +2037,15 @@
/* mpfr_cos(ret, p1, rnd). */
static VALUE r_mpfr_math_cos(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_cos(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1952,14 +2053,15 @@
/* mpfr_sin(ret, p1, rnd). */
static VALUE r_mpfr_math_sin(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_sin(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1967,14 +2069,15 @@
/* mpfr_tan(ret, p1, rnd). */
static VALUE r_mpfr_math_tan(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_tan(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1982,14 +2085,15 @@
/* mpfr_sec(ret, p1, rnd). */
static VALUE r_mpfr_math_sec(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_sec(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -1997,14 +2101,15 @@
/* mpfr_csc(ret, p1, rnd). */
static VALUE r_mpfr_math_csc(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_csc(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2012,14 +2117,15 @@
/* mpfr_cot(ret, p1, rnd). */
static VALUE r_mpfr_math_cot(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_cot(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2027,14 +2133,15 @@
/* Return [sin, cos] such as mpfr_sin_cos(sin, cos, p1, rnd). */
static VALUE r_mpfr_math_sin_cos(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return1, *ptr_return2;
VALUE val_ret1, val_ret2;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret1, ptr_return1, prec);
r_mpfr_make_struct_init2(val_ret2, ptr_return2, prec);
mpfr_sin_cos(ptr_return1, ptr_return2, ptr_arg1, rnd);
return rb_ary_new3(2, ptr_return1, ptr_return2);
@@ -2043,14 +2150,15 @@
/* mpfr_acos(ret, p1, rnd). */
static VALUE r_mpfr_math_acos(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_acos(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2058,14 +2166,15 @@
/* mpfr_asin(ret, p1, rnd). */
static VALUE r_mpfr_math_asin(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_asin(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2073,14 +2182,15 @@
/* mpfr_atan(ret, p1, rnd). */
static VALUE r_mpfr_math_atan(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_atan(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2088,16 +2198,17 @@
/* mpfr_atan2(ret, p1, rnd). */
static VALUE r_mpfr_math_atan2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg0, *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg0, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg1, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_atan2(ptr_return, ptr_arg0, ptr_arg1, rnd));
return val_ret;
}
@@ -2105,14 +2216,15 @@
/* mpfr_cosh(ret, p1, rnd). */
static VALUE r_mpfr_math_cosh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_cosh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2120,14 +2232,15 @@
/* mpfr_sinh(ret, p1, rnd). */
static VALUE r_mpfr_math_sinh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_sinh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2135,14 +2248,15 @@
/* mpfr_tanh(ret, p1, rnd). */
static VALUE r_mpfr_math_tanh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_tanh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2150,14 +2264,15 @@
/* Return array contaning hyperbolic sine and hyperbolic cosine by mpfr_sinh_cosh(ret1, ret2, arg1, rnd). */
static VALUE r_mpfr_math_sinh_cosh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return1, *ptr_return2;
VALUE val_ret1, val_ret2;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret1, ptr_return1, prec);
r_mpfr_make_struct_init2(val_ret2, ptr_return2, prec);
r_mpfr_set_special_func_state(mpfr_sinh_cosh(ptr_return1, ptr_return2, ptr_arg1, rnd));
return rb_ary_new3(2, val_ret1, val_ret2);
@@ -2166,14 +2281,15 @@
/* mpfr_sech(ret, p1, rnd). */
static VALUE r_mpfr_math_sech(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_sech(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2181,14 +2297,15 @@
/* mpfr_csch(ret, p1, rnd). */
static VALUE r_mpfr_math_csch(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_csch(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2196,14 +2313,15 @@
/* mpfr_coth(ret, p1, rnd). */
static VALUE r_mpfr_math_coth(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_coth(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2211,14 +2329,15 @@
/* mpfr_acosh(ret, p1, rnd). */
static VALUE r_mpfr_math_acosh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_acosh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2226,14 +2345,15 @@
/* mpfr_asinh(ret, p1, rnd). */
static VALUE r_mpfr_math_asinh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_asinh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2241,14 +2361,15 @@
/* mpfr_atanh(ret, p1, rnd). */
static VALUE r_mpfr_math_atanh(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_atanh(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2256,15 +2377,16 @@
/* mpfr_fac_ui(ret, p1, rnd). */
static VALUE r_mpfr_math_fac_ui(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_return;
VALUE val_ret;
+ int num;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- int num = NUM2INT(argv[0]);
+ num = NUM2INT(argv[0]);
if(num >= 0){
r_mpfr_set_special_func_state(mpfr_fac_ui(ptr_return, num, rnd));
}else{
rb_raise(rb_eArgError, "First argument must be positive Fixnum.");
}
@@ -2274,14 +2396,15 @@
/* mpfr_log1p(ret, p1, rnd). */
static VALUE r_mpfr_math_log1p(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0= r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_log1p(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2289,14 +2412,15 @@
/* mpfr_expm1(ret, p1, rnd). */
static VALUE r_mpfr_math_expm1(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0= r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_expm1(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2304,14 +2428,15 @@
/* mpfr_eint(ret, p1, rnd). */
static VALUE r_mpfr_math_eint(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_eint(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2319,14 +2444,15 @@
/* mpfr_li2(ret, p1, rnd). */
static VALUE r_mpfr_math_li2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_li2(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2334,14 +2460,15 @@
/* mpfr_gamma(ret, p1, rnd). */
static VALUE r_mpfr_math_gamma(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_gamma(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2349,14 +2476,15 @@
/* mpfr_lngamma(ret, p1, rnd). */
static VALUE r_mpfr_math_lngamma(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_lngamma(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2364,15 +2492,16 @@
/* Execute mpfr_lgamma(ret1, ret2, p1, rnd) and return [ret1, ret2]. */
static VALUE r_mpfr_math_lgamma(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
int singp;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_lgamma(ptr_return, &singp, ptr_arg1, rnd));
return rb_ary_new3(2, val_ret, INT2FIX(singp));
}
@@ -2380,14 +2509,15 @@
/* mpfr_digamma(ret, p1, rnd). */
static VALUE r_mpfr_math_digamma(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_digamma(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2395,13 +2525,13 @@
/* mpfr_zeta(ret, p1, rnd). */
static VALUE r_mpfr_math_zeta(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
if(TYPE(argv[0]) == T_FIXNUM){
int num = FIX2LONG(argv[0]);
if(num >= 0){
mpfr_zeta_ui(ptr_return, (unsigned long)num, rnd);
@@ -2418,14 +2548,15 @@
/* mpfr_erf(ret, p1, rnd). */
static VALUE r_mpfr_math_erf(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_erf(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2433,14 +2564,15 @@
/* mpfr_erfc(ret, p1, rnd). */
static VALUE r_mpfr_math_erfc(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_erfc(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2448,14 +2580,15 @@
/* mpfr_j0(ret, p1, rnd). */
static VALUE r_mpfr_math_j0(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_j0(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2463,14 +2596,15 @@
/* mpfr_j1(ret, p1, rnd). */
static VALUE r_mpfr_math_j1(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_j1(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2478,30 +2612,33 @@
/* mpfr_jn(ret, p2, p1, rnd) */
static VALUE r_mpfr_math_jn(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ int n;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- int n = NUM2INT(argv[1]);
+ n = NUM2INT(argv[1]);
r_mpfr_set_special_func_state(mpfr_jn(ptr_return, n, ptr_arg1, rnd));
return val_ret;
}
/* mpfr_y0(ret, p1, rnd). */
static VALUE r_mpfr_math_y0(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_y0(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2509,14 +2646,15 @@
/* mpfr_y1(ret, p1, rnd). */
static VALUE r_mpfr_math_y1(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_y1(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2524,34 +2662,37 @@
/* mpfr_yn(ret, p2, p1, rnd) */
static VALUE r_mpfr_math_yn(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ int n;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
- int n = NUM2INT(argv[1]);
+ n = NUM2INT(argv[1]);
r_mpfr_set_special_func_state(mpfr_yn(ptr_return, n, ptr_arg1, rnd));
return val_ret;
}
/* mpfr_fma(ret, p1, p2, p3, rnd). */
static VALUE r_mpfr_math_fma(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 3, 5, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_arg3, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1, tmp_argv2;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 3, 5, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
- volatile VALUE tmp_argv2 = r_mpfr_new_fr_obj(argv[2]);
+ tmp_argv2 = r_mpfr_new_fr_obj(argv[2]);
r_mpfr_get_struct(ptr_arg3, tmp_argv2);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_fma(ptr_return, ptr_arg1, ptr_arg2, ptr_arg3, rnd));
return val_ret;
}
@@ -2559,18 +2700,19 @@
/* mpfr_fms(ret, p1, p2, p3, rnd). */
static VALUE r_mpfr_math_fms(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 3, 5, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_arg3, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1, tmp_argv2;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 3, 5, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
- volatile VALUE tmp_argv2 = r_mpfr_new_fr_obj(argv[2]);
+ tmp_argv2 = r_mpfr_new_fr_obj(argv[2]);
r_mpfr_get_struct(ptr_arg3, tmp_argv2);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_fms(ptr_return, ptr_arg1, ptr_arg2, ptr_arg3, rnd));
return val_ret;
}
@@ -2578,16 +2720,17 @@
/* mpfr_agm(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_agm(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_agm(ptr_return, ptr_arg1, ptr_arg2, rnd));
return val_ret;
}
@@ -2595,16 +2738,17 @@
/* mpfr_hypot(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_hypot(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_hypot(ptr_return, ptr_arg1, ptr_arg2, rnd));
return val_ret;
}
@@ -2612,14 +2756,15 @@
/* mpfr_ai(ret, p1, rnd). */
static VALUE r_mpfr_math_ai(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
MPFR *ptr_arg1, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 1, 3, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_ai(ptr_return, ptr_arg1, rnd));
return val_ret;
}
@@ -2627,52 +2772,52 @@
/* mpfr_const_log2(ret, rnd). */
static VALUE r_mpfr_math_const_log2(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_const_log2(ptr_return, rnd));
return val_ret;
}
/* mpfr_const_pi(ret, rnd). */
static VALUE r_mpfr_math_const_pi(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_const_pi(ptr_return, rnd));
return val_ret;
}
/* mpfr_const_euler(ret, rnd). */
static VALUE r_mpfr_math_const_euler(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_const_euler(ptr_return, rnd));
return val_ret;
}
/* mpfr_const_catalan(ret, rnd). */
static VALUE r_mpfr_math_const_catalan(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
MPFR *ptr_return;
VALUE val_ret;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 0, 2, argc, argv);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
r_mpfr_set_special_func_state(mpfr_const_catalan(ptr_return, rnd));
return val_ret;
}
@@ -2683,21 +2828,19 @@
return Qnil;
}
/* Calculate sum of MPFR objects. */
static VALUE r_mpfr_math_sum(int argc, VALUE *argv, VALUE self){
- int num;
+ int num, i;
+ mp_rnd_t rnd;
+ mp_prec_t prec;
+ VALUE val_ret;
for (num = 0; num < argc; num += 1) {
if(!MPFR_P(argv[num])){ break; }
}
-
- mp_rnd_t rnd;
- mp_prec_t prec;
r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, num, num + 2, argc, argv);
MPFR *ptr_return, *ptr_args[num];
- VALUE val_ret;
- int i;
for(i = 0; i < num; i++){
volatile VALUE tmp_argvi = r_mpfr_new_fr_obj(argv[i]);
r_mpfr_get_struct(ptr_args[i], tmp_argvi);
}
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
@@ -2712,16 +2855,17 @@
/* mpfr_min(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_min(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_min(ptr_return, ptr_arg1, ptr_arg2, rnd);
return val_ret;
}
@@ -2729,16 +2873,17 @@
/* mpfr_max(ret, p1, p2, rnd). */
static VALUE r_mpfr_math_max(int argc, VALUE *argv, VALUE self)
{
mp_rnd_t rnd;
mp_prec_t prec;
- r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
MPFR *ptr_arg1, *ptr_arg2, *ptr_return;
VALUE val_ret;
- volatile VALUE tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
+ volatile VALUE tmp_argv0, tmp_argv1;
+ r_mpfr_get_rnd_prec_from_optional_arguments(&rnd, &prec, 2, 4, argc, argv);
+ tmp_argv0 = r_mpfr_new_fr_obj(argv[0]);
r_mpfr_get_struct(ptr_arg1, tmp_argv0);
- volatile VALUE tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
+ tmp_argv1 = r_mpfr_new_fr_obj(argv[1]);
r_mpfr_get_struct(ptr_arg2, tmp_argv1);
r_mpfr_make_struct_init2(val_ret, ptr_return, prec);
mpfr_max(ptr_return, ptr_arg1, ptr_arg2, rnd);
return val_ret;
}
@@ -2802,13 +2947,15 @@
}
static VALUE r_mpfr_marshal_dump(VALUE self)
{
MPFR *ptr_s;
+ char *ret_str;
+ VALUE ret_val;
r_mpfr_get_struct(ptr_s, self);
- char *ret_str = r_mpfr_dump_to_string(ptr_s);
- VALUE ret_val = rb_str_new2(ret_str);
+ ret_str = r_mpfr_dump_to_string(ptr_s);
+ ret_val = rb_str_new2(ret_str);
mpfr_free_str(ret_str);
return ret_val;
}
void r_mpfr_load_string(MPFR *ptr_s, const char *dump)
@@ -2818,13 +2965,13 @@
type = dump[0];
dump++;
if (type == MPFR_DUMP_NUMBER) {
mpz_t m;
long int e;
+ int i;
mpz_init(m);
sscanf(dump, "%ld\t%ld\t", &prec, &e);
- int i;
i = 0;
while (i < 2) {
if (dump[0] == '\t') {
i++;
}
@@ -2978,10 +3125,12 @@
*/
r_mpfr_class = rb_define_class("MPFR", rb_cNumeric);
rb_include_module(r_mpfr_class, rb_mComparable);
+ __mpfr_domain_error__ = rb_define_class("MPFRDomainError", rb_eRangeError);
+
/* ------------------------------ Class MPFR End ------------------------------ */
/* ------------------------------ Constants Start ------------------------------ */
/* Integer that is macro MPFR_VERSION. */
@@ -3109,11 +3258,10 @@
/* ------------------------------ Conversion functions Start ------------------------------ */
rb_define_method(r_mpfr_class, "get_d", r_mpfr_get_d, -1);
rb_define_method(r_mpfr_class, "get_d_2exp", r_mpfr_get_d_2exp, -1);
- rb_define_method(r_mpfr_class, "get_si", r_mpfr_get_si, -1);
rb_define_method(r_mpfr_class, "get_str", r_mpfr_get_str, 0);
rb_define_method(r_mpfr_class, "round", r_mpfr_round_to_i, 0);
rb_define_method(r_mpfr_class, "floor", r_mpfr_floor_to_i, 0);
rb_define_method(r_mpfr_class, "ceil", r_mpfr_ceil_to_i, 0);
@@ -3159,11 +3307,11 @@
rb_define_alias(r_mpfr_class, "<=>", "cmp");
rb_define_alias(r_mpfr_class, "nan?", "nan_p");
rb_define_alias(r_mpfr_class, "finite?", "number_p");
rb_define_alias(r_mpfr_class, "zero?", "zero_p");
- rb_define_method(r_mpfr_class, "nonzero?", r_mpfr_nonzero_p, 1);
- rb_define_method(r_mpfr_class, "regular?", r_mpfr_regular_p, 1);
+ rb_define_method(r_mpfr_class, "nonzero?", r_mpfr_nonzero_p, 0);
+ rb_define_method(r_mpfr_class, "regular?", r_mpfr_regular_p, 0);
/* ------------------------------ Comparison Functions Start ------------------------------ */
/* ------------------------------ Integer Related Functions Start ------------------------------ */