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 ------------------------------ */