From 25c0cb981af8fda9860ec6e365b9ea7a9e3f498f Mon Sep 17 00:00:00 2001 From: ko1 Date: Tue, 13 Nov 2007 16:00:53 +0000 Subject: * include/ruby/ruby.h: introduce 2 macros: RFLOAT_VALUE(v), DOUBLE2NUM(dbl). Rename RFloat#value -> RFloat#double_value. Do not touch RFloat#double_value directly. * bignum.c, insns.def, marshal.c, math.c, numeric.c, object.c, pack.c, parse.y, process.c, random.c, sprintf.c, string.c, time.c: apply above changes. * ext/dl/mkcallback.rb, ext/json/ext/generator/generator.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 14 +++ bignum.c | 26 +++--- ext/dl/mkcallback.rb | 4 +- ext/json/ext/generator/generator.c | 2 +- include/ruby/ruby.h | 4 +- insns.def | 16 ++-- marshal.c | 4 +- math.c | 74 ++++++++-------- numeric.c | 176 ++++++++++++++++++------------------- object.c | 20 ++--- pack.c | 24 ++--- parse.y | 4 +- process.c | 8 +- random.c | 14 +-- sprintf.c | 8 +- string.c | 2 +- time.c | 10 +-- 17 files changed, 213 insertions(+), 197 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5f1086b77a..914e63a026 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Wed Nov 14 00:33:49 2007 Koichi Sasada + + * include/ruby/ruby.h: introduce 2 macros: + RFLOAT_VALUE(v), DOUBLE2NUM(dbl). + Rename RFloat#value -> RFloat#double_value. + Do not touch RFloat#double_value directly. + + * bignum.c, insns.def, marshal.c, math.c, numeric.c, object.c, + pack.c, parse.y, process.c, random.c, sprintf.c, string.c, + time.c: apply above changes. + + * ext/dl/mkcallback.rb, ext/json/ext/generator/generator.c: + ditto. + Wed Nov 14 00:15:37 2007 Nobuyoshi Nakada * tool/ytab.sed: get rid of GNU sed feature. a patch from Laurent diff --git a/bignum.c b/bignum.c index 653ad8216d..138922c417 100644 --- a/bignum.c +++ b/bignum.c @@ -1147,7 +1147,7 @@ rb_big2dbl(VALUE x) static VALUE rb_big_to_f(VALUE x) { - return rb_float_new(rb_big2dbl(x)); + return DOUBLE2NUM(rb_big2dbl(x)); } /* @@ -1174,7 +1174,7 @@ rb_big_cmp(VALUE x, VALUE y) break; case T_FLOAT: - return rb_dbl_cmp(rb_big2dbl(x), RFLOAT(y)->value); + return rb_dbl_cmp(rb_big2dbl(x), RFLOAT_VALUE(y)); default: return rb_num_coerce_cmp(x, y); @@ -1218,7 +1218,7 @@ rb_big_eq(VALUE x, VALUE y) { volatile double a, b; - a = RFLOAT(y)->value; + a = RFLOAT_VALUE(y); if (isnan(a)) return Qfalse; b = rb_big2dbl(x); return (a == b)?Qtrue:Qfalse; @@ -1409,7 +1409,7 @@ rb_big_plus(VALUE x, VALUE y) return bignorm(bigadd(x, y, 1)); case T_FLOAT: - return rb_float_new(rb_big2dbl(x) + RFLOAT(y)->value); + return DOUBLE2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); @@ -1434,7 +1434,7 @@ rb_big_minus(VALUE x, VALUE y) return bignorm(bigadd(x, y, 0)); case T_FLOAT: - return rb_float_new(rb_big2dbl(x) - RFLOAT(y)->value); + return DOUBLE2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); @@ -1458,7 +1458,7 @@ rb_big_mul0(VALUE x, VALUE y) break; case T_FLOAT: - return rb_float_new(rb_big2dbl(x) * RFLOAT(y)->value); + return DOUBLE2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); @@ -1664,7 +1664,7 @@ rb_big_div(VALUE x, VALUE y) break; case T_FLOAT: - return rb_float_new(rb_big2dbl(x) / RFLOAT(y)->value); + return DOUBLE2NUM(rb_big2dbl(x) / RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); @@ -1834,10 +1834,10 @@ rb_big_quo(VALUE x, VALUE y) if (ey) y = big_shift(y, ey); bignum: bigdivrem(x, y, &z, 0); - return rb_float_new(ldexp(big2dbl(z), ex - ey)); + return DOUBLE2NUM(ldexp(big2dbl(z), ex - ey)); } case T_FLOAT: - y = dbl2big(ldexp(frexp(RFLOAT(y)->value, &ey), DBL_MANT_DIG)); + y = dbl2big(ldexp(frexp(RFLOAT_VALUE(y), &ey), DBL_MANT_DIG)); ey -= DBL_MANT_DIG; goto bignum; } @@ -1852,13 +1852,13 @@ rb_big_quo(VALUE x, VALUE y) break; case T_FLOAT: - dy = RFLOAT(y)->value; + dy = RFLOAT_VALUE(y); break; default: return rb_num_coerce_bin(x, y); } - return rb_float_new(dx / dy); + return DOUBLE2NUM(dx / dy); } static VALUE @@ -1930,7 +1930,7 @@ rb_big_pow(VALUE x, VALUE y) if (y == INT2FIX(0)) return INT2FIX(1); switch (TYPE(y)) { case T_FLOAT: - d = RFLOAT(y)->value; + d = RFLOAT_VALUE(y); break; case T_BIGNUM: @@ -1965,7 +1965,7 @@ rb_big_pow(VALUE x, VALUE y) default: return rb_num_coerce_bin(x, y); } - return rb_float_new(pow(rb_big2dbl(x), d)); + return DOUBLE2NUM(pow(rb_big2dbl(x), d)); } /* diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb index 8526353bf3..21fb177f8b 100644 --- a/ext/dl/mkcallback.rb +++ b/ext/dl/mkcallback.rb @@ -70,12 +70,12 @@ DLTYPE = { FLOAT => { :name => 'float', :type => 'float', - :conv => 'RFLOAT(%s)->value', + :conv => 'RFLOAT_VALUE(%s)', }, DOUBLE => { :name => 'double', :type => 'double', - :conv => 'RFLOAT(%s)->value', + :conv => 'RFLOAT_VALUE(%s)', }, VOIDP => { :name => 'ptr', diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c index 616832c992..d030a72326 100644 --- a/ext/json/ext/generator/generator.c +++ b/ext/json/ext/generator/generator.c @@ -275,7 +275,7 @@ static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self) { JSON_Generator_State *state = NULL; VALUE Vstate, rest, tmp; - double value = RFLOAT(self)->value; + double value = RFLOAT_VALUE(self); rb_scan_args(argc, argv, "01*", &Vstate, &rest); if (!NIL_P(Vstate)) Data_Get_Struct(Vstate, JSON_Generator_State, state); if (isinf(value)) { diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index e37aa7e5f4..6ba9ffb872 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -451,8 +451,10 @@ struct RClass { struct RFloat { struct RBasic basic; - double value; + double double_value; }; +#define RFLOAT_VALUE(v) (RFLOAT(v)->double_value) +#define DOUBLE2NUM(dbl) rb_float_new(dbl) #define ELTS_SHARED FL_USER2 diff --git a/insns.def b/insns.def index ee6de0a845..374445d38b 100644 --- a/insns.def +++ b/insns.def @@ -1391,7 +1391,7 @@ opt_plus else if (HEAP_CLASS_OF(recv) == rb_cFloat && HEAP_CLASS_OF(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_PLUS)) { - val = rb_float_new(RFLOAT(recv)->value + RFLOAT(obj)->value); + val = DOUBLE2NUM(RFLOAT_VALUE(recv) + RFLOAT_VALUE(obj)); } #endif @@ -1492,7 +1492,7 @@ opt_mult else if (HEAP_CLASS_OF(recv) == rb_cFloat && HEAP_CLASS_OF(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_MULT)) { - val = rb_float_new(RFLOAT(recv)->value * RFLOAT(obj)->value); + val = DOUBLE2NUM(RFLOAT_VALUE(recv) * RFLOAT_VALUE(obj)); } #endif else { @@ -1556,7 +1556,7 @@ opt_div else if (HEAP_CLASS_OF(recv) == rb_cFloat && HEAP_CLASS_OF(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_DIV)) { - val = rb_float_new(RFLOAT(recv)->value / RFLOAT(obj)->value); + val = DOUBLE2NUM(RFLOAT_VALUE(recv) / RFLOAT_VALUE(obj)); } #endif else { @@ -1620,8 +1620,8 @@ opt_mod else if (HEAP_CLASS_OF(recv) == rb_cFloat && HEAP_CLASS_OF(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_MOD)) { - double x = RFLOAT(recv)->value; - double y = RFLOAT(obj)->value; + double x = RFLOAT_VALUE(recv); + double y = RFLOAT_VALUE(obj); double div, mod; { @@ -1636,7 +1636,7 @@ opt_mod mod += y; div -= 1.0; } - val = rb_float_new(mod); + val = DOUBLE2NUM(mod); } else { goto INSN_LABEL(normal_dispatch); @@ -1678,8 +1678,8 @@ opt_eq else if (HEAP_CLASS_OF(recv) == rb_cFloat && HEAP_CLASS_OF(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_EQ)) { - double a = RFLOAT(recv)->value; - double b = RFLOAT(obj)->value; + double a = RFLOAT_VALUE(recv); + double b = RFLOAT_VALUE(obj); if (isnan(a) || isnan(b)) { val = Qfalse; diff --git a/marshal.c b/marshal.c index c6b2d19838..1d883bfdd6 100644 --- a/marshal.c +++ b/marshal.c @@ -637,7 +637,7 @@ w_object(VALUE obj, struct dump_arg *arg, int limit) case T_FLOAT: w_byte(TYPE_FLOAT, arg); - w_float(RFLOAT(obj)->value, arg); + w_float(RFLOAT_VALUE(obj), arg); break; case T_BIGNUM: @@ -1239,7 +1239,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod) d = strtod(ptr, &e); d = load_mantissa(d, e, RSTRING_LEN(str) - (e - ptr)); } - v = rb_float_new(d); + v = DOUBLE2NUM(d); v = r_entry(v, arg); v = r_leave(v, arg); } diff --git a/math.c b/math.c index 1e55902db8..e37ec75b49 100644 --- a/math.c +++ b/math.c @@ -55,7 +55,7 @@ static VALUE math_atan2(VALUE obj, VALUE y, VALUE x) { Need_Float2(y, x); - return rb_float_new(atan2(RFLOAT(y)->value, RFLOAT(x)->value)); + return DOUBLE2NUM(atan2(RFLOAT_VALUE(y), RFLOAT_VALUE(x))); } @@ -71,7 +71,7 @@ static VALUE math_cos(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(cos(RFLOAT(x)->value)); + return DOUBLE2NUM(cos(RFLOAT_VALUE(x))); } /* @@ -87,7 +87,7 @@ math_sin(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(sin(RFLOAT(x)->value)); + return DOUBLE2NUM(sin(RFLOAT_VALUE(x))); } @@ -103,7 +103,7 @@ math_tan(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(tan(RFLOAT(x)->value)); + return DOUBLE2NUM(tan(RFLOAT_VALUE(x))); } /* @@ -120,9 +120,9 @@ math_acos(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = acos(RFLOAT(x)->value); + d = acos(RFLOAT_VALUE(x)); domain_check(d, "acos"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -139,9 +139,9 @@ math_asin(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = asin(RFLOAT(x)->value); + d = asin(RFLOAT_VALUE(x)); domain_check(d, "asin"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -155,7 +155,7 @@ static VALUE math_atan(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(atan(RFLOAT(x)->value)); + return DOUBLE2NUM(atan(RFLOAT_VALUE(x))); } #ifndef HAVE_COSH @@ -178,7 +178,7 @@ math_cosh(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(cosh(RFLOAT(x)->value)); + return DOUBLE2NUM(cosh(RFLOAT_VALUE(x))); } #ifndef HAVE_SINH @@ -201,7 +201,7 @@ static VALUE math_sinh(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(sinh(RFLOAT(x)->value)); + return DOUBLE2NUM(sinh(RFLOAT_VALUE(x))); } #ifndef HAVE_TANH @@ -224,7 +224,7 @@ static VALUE math_tanh(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(tanh(RFLOAT(x)->value)); + return DOUBLE2NUM(tanh(RFLOAT_VALUE(x))); } /* @@ -241,9 +241,9 @@ math_acosh(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = acosh(RFLOAT(x)->value); + d = acosh(RFLOAT_VALUE(x)); domain_check(d, "acosh"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -257,7 +257,7 @@ static VALUE math_asinh(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(asinh(RFLOAT(x)->value)); + return DOUBLE2NUM(asinh(RFLOAT_VALUE(x))); } /* @@ -274,9 +274,9 @@ math_atanh(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = atanh(RFLOAT(x)->value); + d = atanh(RFLOAT_VALUE(x)); domain_check(d, "atanh"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -290,7 +290,7 @@ static VALUE math_exp(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(exp(RFLOAT(x)->value)); + return DOUBLE2NUM(exp(RFLOAT_VALUE(x))); } #if defined __CYGWIN__ @@ -321,13 +321,13 @@ math_log(int argc, VALUE *argv) rb_scan_args(argc, argv, "11", &x, &base); Need_Float(x); errno = 0; - d = log(RFLOAT(x)->value); + d = log(RFLOAT_VALUE(x)); if (!NIL_P(base)) { Need_Float(base); - d /= log(RFLOAT(base)->value); + d /= log(RFLOAT_VALUE(base)); } domain_check(d, "log"); - return rb_float_new(d); + return DOUBLE2NUM(d); } #ifndef log2 @@ -356,11 +356,11 @@ math_log2(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = log2(RFLOAT(x)->value); + d = log2(RFLOAT_VALUE(x)); if (errno) { rb_sys_fail("log2"); } - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -377,9 +377,9 @@ math_log10(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = log10(RFLOAT(x)->value); + d = log10(RFLOAT_VALUE(x)); domain_check(d, "log10"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -396,9 +396,9 @@ math_sqrt(VALUE obj, VALUE x) Need_Float(x); errno = 0; - d = sqrt(RFLOAT(x)->value); + d = sqrt(RFLOAT_VALUE(x)); domain_check(d, "sqrt"); - return rb_float_new(d); + return DOUBLE2NUM(d); } /* @@ -421,8 +421,8 @@ math_frexp(VALUE obj, VALUE x) Need_Float(x); - d = frexp(RFLOAT(x)->value, &exp); - return rb_assoc_new(rb_float_new(d), INT2NUM(exp)); + d = frexp(RFLOAT_VALUE(x), &exp); + return rb_assoc_new(DOUBLE2NUM(d), INT2NUM(exp)); } /* @@ -439,7 +439,7 @@ static VALUE math_ldexp(VALUE obj, VALUE x, VALUE n) { Need_Float(x); - return rb_float_new(ldexp(RFLOAT(x)->value, NUM2INT(n))); + return DOUBLE2NUM(ldexp(RFLOAT_VALUE(x), NUM2INT(n))); } /* @@ -456,7 +456,7 @@ static VALUE math_hypot(VALUE obj, VALUE x, VALUE y) { Need_Float2(x, y); - return rb_float_new(hypot(RFLOAT(x)->value, RFLOAT(y)->value)); + return DOUBLE2NUM(hypot(RFLOAT_VALUE(x), RFLOAT_VALUE(y))); } /* @@ -470,7 +470,7 @@ static VALUE math_erf(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(erf(RFLOAT(x)->value)); + return DOUBLE2NUM(erf(RFLOAT_VALUE(x))); } /* @@ -484,7 +484,7 @@ static VALUE math_erfc(VALUE obj, VALUE x) { Need_Float(x); - return rb_float_new(erfc(RFLOAT(x)->value)); + return DOUBLE2NUM(erfc(RFLOAT_VALUE(x))); } /* @@ -501,15 +501,15 @@ Init_Math(void) rb_mMath = rb_define_module("Math"); #ifdef M_PI - rb_define_const(rb_mMath, "PI", rb_float_new(M_PI)); + rb_define_const(rb_mMath, "PI", DOUBLE2NUM(M_PI)); #else - rb_define_const(rb_mMath, "PI", rb_float_new(atan(1.0)*4.0)); + rb_define_const(rb_mMath, "PI", DOUBLE2NUM(atan(1.0)*4.0)); #endif #ifdef M_E - rb_define_const(rb_mMath, "E", rb_float_new(M_E)); + rb_define_const(rb_mMath, "E", DOUBLE2NUM(M_E)); #else - rb_define_const(rb_mMath, "E", rb_float_new(exp(1.0))); + rb_define_const(rb_mMath, "E", DOUBLE2NUM(exp(1.0))); #endif rb_define_module_function(rb_mMath, "atan2", math_atan2, 2); diff --git a/numeric.c b/numeric.c index ddd30e46af..ef199fe66a 100644 --- a/numeric.c +++ b/numeric.c @@ -465,7 +465,7 @@ rb_float_new(double d) NEWOBJ(flt, struct RFloat); OBJSETUP(flt, rb_cFloat, T_FLOAT); - flt->value = d; + flt->double_value = d; return (VALUE)flt; } @@ -483,7 +483,7 @@ static VALUE flo_to_s(VALUE flt) { char buf[32]; - double value = RFLOAT(flt)->value; + double value = RFLOAT_VALUE(flt); char *p, *e; if (isinf(value)) @@ -528,7 +528,7 @@ flo_coerce(VALUE x, VALUE y) static VALUE flo_uminus(VALUE flt) { - return rb_float_new(-RFLOAT(flt)->value); + return DOUBLE2NUM(-RFLOAT_VALUE(flt)); } /* @@ -544,11 +544,11 @@ flo_plus(VALUE x, VALUE y) { switch (TYPE(y)) { case T_FIXNUM: - return rb_float_new(RFLOAT(x)->value + (double)FIX2LONG(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) + (double)FIX2LONG(y)); case T_BIGNUM: - return rb_float_new(RFLOAT(x)->value + rb_big2dbl(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) + rb_big2dbl(y)); case T_FLOAT: - return rb_float_new(RFLOAT(x)->value + RFLOAT(y)->value); + return DOUBLE2NUM(RFLOAT_VALUE(x) + RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -567,11 +567,11 @@ flo_minus(VALUE x, VALUE y) { switch (TYPE(y)) { case T_FIXNUM: - return rb_float_new(RFLOAT(x)->value - (double)FIX2LONG(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) - (double)FIX2LONG(y)); case T_BIGNUM: - return rb_float_new(RFLOAT(x)->value - rb_big2dbl(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) - rb_big2dbl(y)); case T_FLOAT: - return rb_float_new(RFLOAT(x)->value - RFLOAT(y)->value); + return DOUBLE2NUM(RFLOAT_VALUE(x) - RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -590,11 +590,11 @@ flo_mul(VALUE x, VALUE y) { switch (TYPE(y)) { case T_FIXNUM: - return rb_float_new(RFLOAT(x)->value * (double)FIX2LONG(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) * (double)FIX2LONG(y)); case T_BIGNUM: - return rb_float_new(RFLOAT(x)->value * rb_big2dbl(y)); + return DOUBLE2NUM(RFLOAT_VALUE(x) * rb_big2dbl(y)); case T_FLOAT: - return rb_float_new(RFLOAT(x)->value * RFLOAT(y)->value); + return DOUBLE2NUM(RFLOAT_VALUE(x) * RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -617,12 +617,12 @@ flo_div(VALUE x, VALUE y) switch (TYPE(y)) { case T_FIXNUM: f_y = FIX2LONG(y); - return rb_float_new(RFLOAT(x)->value / (double)f_y); + return DOUBLE2NUM(RFLOAT_VALUE(x) / (double)f_y); case T_BIGNUM: d = rb_big2dbl(y); - return rb_float_new(RFLOAT(x)->value / d); + return DOUBLE2NUM(RFLOAT_VALUE(x) / d); case T_FLOAT: - return rb_float_new(RFLOAT(x)->value / RFLOAT(y)->value); + return DOUBLE2NUM(RFLOAT_VALUE(x) / RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -681,13 +681,13 @@ flo_mod(VALUE x, VALUE y) fy = rb_big2dbl(y); break; case T_FLOAT: - fy = RFLOAT(y)->value; + fy = RFLOAT_VALUE(y); break; default: return rb_num_coerce_bin(x, y); } - flodivmod(RFLOAT(x)->value, fy, 0, &mod); - return rb_float_new(mod); + flodivmod(RFLOAT_VALUE(x), fy, 0, &mod); + return DOUBLE2NUM(mod); } /* @@ -711,12 +711,12 @@ flo_divmod(VALUE x, VALUE y) fy = rb_big2dbl(y); break; case T_FLOAT: - fy = RFLOAT(y)->value; + fy = RFLOAT_VALUE(y); break; default: return rb_num_coerce_bin(x, y); } - flodivmod(RFLOAT(x)->value, fy, &div, &mod); + flodivmod(RFLOAT_VALUE(x), fy, &div, &mod); if (FIXABLE(div)) { #ifdef HVAE_ROUND val = round(div); @@ -731,7 +731,7 @@ flo_divmod(VALUE x, VALUE y) else { a = rb_dbl2big(div); } - b = rb_float_new(mod); + b = DOUBLE2NUM(mod); return rb_assoc_new(a, b); } @@ -748,11 +748,11 @@ flo_pow(VALUE x, VALUE y) { switch (TYPE(y)) { case T_FIXNUM: - return rb_float_new(pow(RFLOAT(x)->value, (double)FIX2LONG(y))); + return DOUBLE2NUM(pow(RFLOAT_VALUE(x), (double)FIX2LONG(y))); case T_BIGNUM: - return rb_float_new(pow(RFLOAT(x)->value, rb_big2dbl(y))); + return DOUBLE2NUM(pow(RFLOAT_VALUE(x), rb_big2dbl(y))); case T_FLOAT: - return rb_float_new(pow(RFLOAT(x)->value, RFLOAT(y)->value)); + return DOUBLE2NUM(pow(RFLOAT_VALUE(x), RFLOAT_VALUE(y))); default: return rb_num_coerce_bin(x, y); } @@ -825,13 +825,13 @@ flo_eq(VALUE x, VALUE y) b = rb_big2dbl(y); break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); if (isnan(b)) return Qfalse; break; default: return num_equal(x, y); } - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); if (isnan(a)) return Qfalse; return (a == b)?Qtrue:Qfalse; } @@ -849,7 +849,7 @@ flo_hash(VALUE num) double d; int hash; - d = RFLOAT(num)->value; + d = RFLOAT_VALUE(num); hash = rb_memhash(&d, sizeof(d)); return INT2FIX(hash); } @@ -878,7 +878,7 @@ flo_cmp(VALUE x, VALUE y) { double a, b; - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); switch (TYPE(y)) { case T_FIXNUM: b = (double)FIX2LONG(y); @@ -889,7 +889,7 @@ flo_cmp(VALUE x, VALUE y) break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); break; default: @@ -910,7 +910,7 @@ flo_gt(VALUE x, VALUE y) { double a, b; - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); switch (TYPE(y)) { case T_FIXNUM: b = (double)FIX2LONG(y); @@ -921,7 +921,7 @@ flo_gt(VALUE x, VALUE y) break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); if (isnan(b)) return Qfalse; break; @@ -945,7 +945,7 @@ flo_ge(VALUE x, VALUE y) { double a, b; - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); switch (TYPE(y)) { case T_FIXNUM: b = (double)FIX2LONG(y); @@ -956,7 +956,7 @@ flo_ge(VALUE x, VALUE y) break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); if (isnan(b)) return Qfalse; break; @@ -979,7 +979,7 @@ flo_lt(VALUE x, VALUE y) { double a, b; - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); switch (TYPE(y)) { case T_FIXNUM: b = (double)FIX2LONG(y); @@ -990,7 +990,7 @@ flo_lt(VALUE x, VALUE y) break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); if (isnan(b)) return Qfalse; break; @@ -1014,7 +1014,7 @@ flo_le(VALUE x, VALUE y) { double a, b; - a = RFLOAT(x)->value; + a = RFLOAT_VALUE(x); switch (TYPE(y)) { case T_FIXNUM: b = (double)FIX2LONG(y); @@ -1025,7 +1025,7 @@ flo_le(VALUE x, VALUE y) break; case T_FLOAT: - b = RFLOAT(y)->value; + b = RFLOAT_VALUE(y); if (isnan(b)) return Qfalse; break; @@ -1051,8 +1051,8 @@ static VALUE flo_eql(VALUE x, VALUE y) { if (TYPE(y) == T_FLOAT) { - double a = RFLOAT(x)->value; - double b = RFLOAT(y)->value; + double a = RFLOAT_VALUE(x); + double b = RFLOAT_VALUE(y); if (isnan(a) || isnan(b)) return Qfalse; if (a == b) return Qtrue; @@ -1087,8 +1087,8 @@ flo_to_f(VALUE num) static VALUE flo_abs(VALUE flt) { - double val = fabs(RFLOAT(flt)->value); - return rb_float_new(val); + double val = fabs(RFLOAT_VALUE(flt)); + return DOUBLE2NUM(val); } /* @@ -1102,7 +1102,7 @@ flo_abs(VALUE flt) static VALUE flo_zero_p(VALUE num) { - if (RFLOAT(num)->value == 0.0) { + if (RFLOAT_VALUE(num) == 0.0) { return Qtrue; } return Qfalse; @@ -1124,7 +1124,7 @@ flo_zero_p(VALUE num) static VALUE flo_is_nan_p(VALUE num) { - double value = RFLOAT(num)->value; + double value = RFLOAT_VALUE(num); return isnan(value) ? Qtrue : Qfalse; } @@ -1144,7 +1144,7 @@ flo_is_nan_p(VALUE num) static VALUE flo_is_infinite_p(VALUE num) { - double value = RFLOAT(num)->value; + double value = RFLOAT_VALUE(num); if (isinf(value)) { return INT2FIX( value < 0 ? -1 : 1 ); @@ -1166,7 +1166,7 @@ flo_is_infinite_p(VALUE num) static VALUE flo_is_finite_p(VALUE num) { - double value = RFLOAT(num)->value; + double value = RFLOAT_VALUE(num); #if HAVE_FINITE if (!finite(value)) @@ -1194,7 +1194,7 @@ flo_is_finite_p(VALUE num) static VALUE flo_floor(VALUE num) { - double f = floor(RFLOAT(num)->value); + double f = floor(RFLOAT_VALUE(num)); long val; if (!FIXABLE(f)) { @@ -1220,7 +1220,7 @@ flo_floor(VALUE num) static VALUE flo_ceil(VALUE num) { - double f = ceil(RFLOAT(num)->value); + double f = ceil(RFLOAT_VALUE(num)); long val; if (!FIXABLE(f)) { @@ -1253,7 +1253,7 @@ flo_round(int argc, VALUE *argv, VALUE num) if (rb_scan_args(argc, argv, "01", &nd) == 1) { ndigits = NUM2INT(nd); } - number = RFLOAT(num)->value; + number = RFLOAT_VALUE(num); f = 1.0; i = abs(ndigits); while (--i >= 0) @@ -1266,7 +1266,7 @@ flo_round(int argc, VALUE *argv, VALUE num) if (ndigits < 0) number *= f; else number /= f; - if (ndigits > 0) return rb_float_new(number); + if (ndigits > 0) return DOUBLE2NUM(number); if (!FIXABLE(number)) { return rb_dbl2big(number); @@ -1287,7 +1287,7 @@ flo_round(int argc, VALUE *argv, VALUE num) static VALUE flo_truncate(VALUE num) { - double f = RFLOAT(num)->value; + double f = RFLOAT_VALUE(num); long val; if (f > 0.0) f = floor(f); @@ -1455,7 +1455,7 @@ num_step(int argc, VALUE *argv, VALUE from) if (err>0.5) err=0.5; n = floor(n + err) + 1; for (i=0; ivalue <= (double)LONG_MAX - && RFLOAT(val)->value >= (double)LONG_MIN) { - return (SIGNED_VALUE)(RFLOAT(val)->value); + if (RFLOAT_VALUE(val) <= (double)LONG_MAX + && RFLOAT_VALUE(val) >= (double)LONG_MIN) { + return (SIGNED_VALUE)(RFLOAT_VALUE(val)); } else { char buf[24]; char *s; - sprintf(buf, "%-.10g", RFLOAT(val)->value); + sprintf(buf, "%-.10g", RFLOAT_VALUE(val)); if ((s = strchr(buf, ' ')) != 0) *s = '\0'; rb_raise(rb_eRangeError, "float %s out of range of integer", buf); } @@ -1636,15 +1636,15 @@ rb_num2ll(VALUE val) switch (TYPE(val)) { case T_FLOAT: - if (RFLOAT(val)->value <= (double)LLONG_MAX - && RFLOAT(val)->value >= (double)LLONG_MIN) { - return (LONG_LONG)(RFLOAT(val)->value); + if (RFLOAT_VALUE(val) <= (double)LLONG_MAX + && RFLOAT_VALUE(val) >= (double)LLONG_MIN) { + return (LONG_LONG)(RFLOAT_VALUE(val)); } else { char buf[24]; char *s; - sprintf(buf, "%-.10g", RFLOAT(val)->value); + sprintf(buf, "%-.10g", RFLOAT_VALUE(val)); if ((s = strchr(buf, ' ')) != 0) *s = '\0'; rb_raise(rb_eRangeError, "float %s out of range of long long", buf); } @@ -2027,7 +2027,7 @@ fix_plus(VALUE x, VALUE y) case T_BIGNUM: return rb_big_plus(y, x); case T_FLOAT: - return rb_float_new((double)FIX2LONG(x) + RFLOAT(y)->value); + return DOUBLE2NUM((double)FIX2LONG(x) + RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -2061,7 +2061,7 @@ fix_minus(VALUE x, VALUE y) x = rb_int2big(FIX2LONG(x)); return rb_big_minus(x, y); case T_FLOAT: - return rb_float_new((double)FIX2LONG(x) - RFLOAT(y)->value); + return DOUBLE2NUM((double)FIX2LONG(x) - RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -2120,7 +2120,7 @@ fix_mul(VALUE x, VALUE y) case T_BIGNUM: return rb_big_mul(y, x); case T_FLOAT: - return rb_float_new((double)FIX2LONG(x) * RFLOAT(y)->value); + return DOUBLE2NUM((double)FIX2LONG(x) * RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -2170,13 +2170,13 @@ static VALUE fix_quo(VALUE x, VALUE y) { if (FIXNUM_P(y)) { - return rb_float_new((double)FIX2LONG(x) / (double)FIX2LONG(y)); + return DOUBLE2NUM((double)FIX2LONG(x) / (double)FIX2LONG(y)); } switch (TYPE(y)) { case T_BIGNUM: - return rb_float_new((double)FIX2LONG(y) / rb_big2dbl(y)); + return DOUBLE2NUM((double)FIX2LONG(y) / rb_big2dbl(y)); case T_FLOAT: - return rb_float_new((double)FIX2LONG(x) / RFLOAT(y)->value); + return DOUBLE2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y)); default: return rb_num_coerce_bin(x, y); } @@ -2197,10 +2197,10 @@ fix_divide(VALUE x, VALUE y, int flo) return rb_big_div(x, y); case T_FLOAT: if (flo) { - return rb_float_new((double)FIX2LONG(x) / RFLOAT(y)->value); + return DOUBLE2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y)); } else { - long div = (double)FIX2LONG(x) / RFLOAT(y)->value; + long div = (double)FIX2LONG(x) / RFLOAT_VALUE(y); return LONG2NUM(div); } default: @@ -2262,8 +2262,8 @@ fix_mod(VALUE x, VALUE y) { double mod; - flodivmod((double)FIX2LONG(x), RFLOAT(y)->value, 0, &mod); - return rb_float_new(mod); + flodivmod((double)FIX2LONG(x), RFLOAT_VALUE(y), 0, &mod); + return DOUBLE2NUM(mod); } default: return rb_num_coerce_bin(x, y); @@ -2295,9 +2295,9 @@ fix_divmod(VALUE x, VALUE y) double div, mod; volatile VALUE a, b; - flodivmod((double)FIX2LONG(x), RFLOAT(y)->value, &div, &mod); - a = rb_float_new(div); - b = rb_float_new(mod); + flodivmod((double)FIX2LONG(x), RFLOAT_VALUE(y), &div, &mod); + a = DOUBLE2NUM(div); + b = DOUBLE2NUM(mod); return rb_assoc_new(a, b); } default: @@ -2366,7 +2366,7 @@ fix_pow(VALUE x, VALUE y) if (b == 1) return x; if (a == 0) { if (b > 0) return INT2FIX(0); - return rb_float_new(1.0 / zero); + return DOUBLE2NUM(1.0 / zero); } if (a == 1) return INT2FIX(1); if (a == -1) { @@ -2378,7 +2378,7 @@ fix_pow(VALUE x, VALUE y) if (b > 0) { return int_pow(a, b); } - return rb_float_new(pow((double)a, (double)b)); + return DOUBLE2NUM(pow((double)a, (double)b)); } switch (TYPE(y)) { case T_BIGNUM: @@ -2391,12 +2391,12 @@ fix_pow(VALUE x, VALUE y) x = rb_int2big(FIX2LONG(x)); return rb_big_pow(x, y); case T_FLOAT: - if (RFLOAT(y)->value == 0.0) return rb_float_new(1.0); + if (RFLOAT_VALUE(y) == 0.0) return DOUBLE2NUM(1.0); if (a == 0) { - return rb_float_new(RFLOAT(y)->value < 0 ? (1.0 / zero) : 0.0); + return DOUBLE2NUM(RFLOAT_VALUE(y) < 0 ? (1.0 / zero) : 0.0); } - if (a == 1) return rb_float_new(1.0); - return rb_float_new(pow((double)a, RFLOAT(y)->value)); + if (a == 1) return DOUBLE2NUM(1.0); + return DOUBLE2NUM(pow((double)a, RFLOAT_VALUE(y))); default: return rb_num_coerce_bin(x, y); } @@ -2422,7 +2422,7 @@ fix_equal(VALUE x, VALUE y) case T_BIGNUM: return rb_big_eq(y, x); case T_FLOAT: - return (double)FIX2LONG(x) == RFLOAT(y)->value ? Qtrue : Qfalse; + return (double)FIX2LONG(x) == RFLOAT_VALUE(y) ? Qtrue : Qfalse; default: return num_equal(x, y); } @@ -2449,7 +2449,7 @@ fix_cmp(VALUE x, VALUE y) case T_BIGNUM: return rb_big_cmp(rb_int2big(FIX2LONG(x)), y); case T_FLOAT: - return rb_dbl_cmp((double)FIX2LONG(x), RFLOAT(y)->value); + return rb_dbl_cmp((double)FIX2LONG(x), RFLOAT_VALUE(y)); default: return rb_num_coerce_cmp(x, y); } @@ -2474,7 +2474,7 @@ fix_gt(VALUE x, VALUE y) case T_BIGNUM: return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) > 0 ? Qtrue : Qfalse; case T_FLOAT: - return (double)FIX2LONG(x) > RFLOAT(y)->value ? Qtrue : Qfalse; + return (double)FIX2LONG(x) > RFLOAT_VALUE(y) ? Qtrue : Qfalse; default: return rb_num_coerce_relop(x, y); } @@ -2499,7 +2499,7 @@ fix_ge(VALUE x, VALUE y) case T_BIGNUM: return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) >= 0 ? Qtrue : Qfalse; case T_FLOAT: - return (double)FIX2LONG(x) >= RFLOAT(y)->value ? Qtrue : Qfalse; + return (double)FIX2LONG(x) >= RFLOAT_VALUE(y) ? Qtrue : Qfalse; default: return rb_num_coerce_relop(x, y); } @@ -2524,7 +2524,7 @@ fix_lt(VALUE x, VALUE y) case T_BIGNUM: return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) < 0 ? Qtrue : Qfalse; case T_FLOAT: - return (double)FIX2LONG(x) < RFLOAT(y)->value ? Qtrue : Qfalse; + return (double)FIX2LONG(x) < RFLOAT_VALUE(y) ? Qtrue : Qfalse; default: return rb_num_coerce_relop(x, y); } @@ -2549,7 +2549,7 @@ fix_le(VALUE x, VALUE y) case T_BIGNUM: return FIX2INT(rb_big_cmp(rb_int2big(FIX2LONG(x)), y)) <= 0 ? Qtrue : Qfalse; case T_FLOAT: - return (double)FIX2LONG(x) <= RFLOAT(y)->value ? Qtrue : Qfalse; + return (double)FIX2LONG(x) <= RFLOAT_VALUE(y) ? Qtrue : Qfalse; default: return rb_num_coerce_relop(x, y); } @@ -2753,7 +2753,7 @@ fix_to_f(VALUE num) val = (double)FIX2LONG(num); - return rb_float_new(val); + return DOUBLE2NUM(val); } /* @@ -3183,9 +3183,9 @@ Init_Numeric(void) rb_define_const(rb_cFloat, "MAX_EXP", INT2FIX(DBL_MAX_EXP)); rb_define_const(rb_cFloat, "MIN_10_EXP", INT2FIX(DBL_MIN_10_EXP)); rb_define_const(rb_cFloat, "MAX_10_EXP", INT2FIX(DBL_MAX_10_EXP)); - rb_define_const(rb_cFloat, "MIN", rb_float_new(DBL_MIN)); - rb_define_const(rb_cFloat, "MAX", rb_float_new(DBL_MAX)); - rb_define_const(rb_cFloat, "EPSILON", rb_float_new(DBL_EPSILON)); + rb_define_const(rb_cFloat, "MIN", DOUBLE2NUM(DBL_MIN)); + rb_define_const(rb_cFloat, "MAX", DOUBLE2NUM(DBL_MAX)); + rb_define_const(rb_cFloat, "EPSILON", DOUBLE2NUM(DBL_EPSILON)); rb_define_method(rb_cFloat, "to_s", flo_to_s, 0); rb_define_method(rb_cFloat, "coerce", flo_coerce, 1); diff --git a/object.c b/object.c index 5bb9a7cd03..edec861a20 100644 --- a/object.c +++ b/object.c @@ -755,7 +755,7 @@ nil_to_i(VALUE obj) static VALUE nil_to_f(VALUE obj) { - return rb_float_new(0.0); + return DOUBLE2NUM(0.0); } /* @@ -1950,11 +1950,11 @@ rb_Integer(VALUE val) switch (TYPE(val)) { case T_FLOAT: - if (RFLOAT(val)->value <= (double)FIXNUM_MAX - && RFLOAT(val)->value >= (double)FIXNUM_MIN) { + if (RFLOAT_VALUE(val) <= (double)FIXNUM_MAX + && RFLOAT_VALUE(val) >= (double)FIXNUM_MIN) { break; } - return rb_dbl2big(RFLOAT(val)->value); + return rb_dbl2big(RFLOAT_VALUE(val)); case T_FIXNUM: case T_BIGNUM: @@ -2094,16 +2094,16 @@ rb_Float(VALUE val) { switch (TYPE(val)) { case T_FIXNUM: - return rb_float_new((double)FIX2LONG(val)); + return DOUBLE2NUM((double)FIX2LONG(val)); case T_FLOAT: return val; case T_BIGNUM: - return rb_float_new(rb_big2dbl(val)); + return DOUBLE2NUM(rb_big2dbl(val)); case T_STRING: - return rb_float_new(rb_str_to_dbl(val, Qtrue)); + return DOUBLE2NUM(rb_str_to_dbl(val, Qtrue)); case T_NIL: rb_raise(rb_eTypeError, "can't convert nil into Float"); @@ -2112,7 +2112,7 @@ rb_Float(VALUE val) default: { VALUE f = rb_convert_type(val, T_FLOAT, "Float", "to_f"); - if (isnan(RFLOAT(f)->value)) { + if (isnan(RFLOAT_VALUE(f))) { rb_raise(rb_eArgError, "invalid value for Float()"); } return f; @@ -2143,7 +2143,7 @@ rb_num2dbl(VALUE val) { switch (TYPE(val)) { case T_FLOAT: - return RFLOAT(val)->value; + return RFLOAT_VALUE(val); case T_STRING: rb_raise(rb_eTypeError, "no implicit conversion to float from string"); @@ -2157,7 +2157,7 @@ rb_num2dbl(VALUE val) break; } - return RFLOAT(rb_Float(val))->value; + return RFLOAT_VALUE(rb_Float(val)); } char* diff --git a/pack.c b/pack.c index ff0cdae971..4cab476bd2 100644 --- a/pack.c +++ b/pack.c @@ -768,7 +768,7 @@ pack_pack(VALUE ary, VALUE fmt) float f; from = NEXTFROM; - f = RFLOAT(rb_Float(from))->value; + f = RFLOAT_VALUE(rb_Float(from)); rb_str_buf_cat(res, (char*)&f, sizeof(float)); } break; @@ -779,7 +779,7 @@ pack_pack(VALUE ary, VALUE fmt) FLOAT_CONVWITH(ftmp); from = NEXTFROM; - f = RFLOAT(rb_Float(from))->value; + f = RFLOAT_VALUE(rb_Float(from)); f = HTOVF(f,ftmp); rb_str_buf_cat(res, (char*)&f, sizeof(float)); } @@ -791,7 +791,7 @@ pack_pack(VALUE ary, VALUE fmt) DOUBLE_CONVWITH(dtmp); from = NEXTFROM; - d = RFLOAT(rb_Float(from))->value; + d = RFLOAT_VALUE(rb_Float(from)); d = HTOVD(d,dtmp); rb_str_buf_cat(res, (char*)&d, sizeof(double)); } @@ -803,7 +803,7 @@ pack_pack(VALUE ary, VALUE fmt) double d; from = NEXTFROM; - d = RFLOAT(rb_Float(from))->value; + d = RFLOAT_VALUE(rb_Float(from)); rb_str_buf_cat(res, (char*)&d, sizeof(double)); } break; @@ -814,7 +814,7 @@ pack_pack(VALUE ary, VALUE fmt) FLOAT_CONVWITH(ftmp); from = NEXTFROM; - f = RFLOAT(rb_Float(from))->value; + f = RFLOAT_VALUE(rb_Float(from)); f = HTONF(f,ftmp); rb_str_buf_cat(res, (char*)&f, sizeof(float)); } @@ -826,7 +826,7 @@ pack_pack(VALUE ary, VALUE fmt) DOUBLE_CONVWITH(dtmp); from = NEXTFROM; - d = RFLOAT(rb_Float(from))->value; + d = RFLOAT_VALUE(rb_Float(from)); d = HTOND(d,dtmp); rb_str_buf_cat(res, (char*)&d, sizeof(double)); } @@ -1634,7 +1634,7 @@ pack_unpack(VALUE str, VALUE fmt) float tmp; memcpy(&tmp, s, sizeof(float)); s += sizeof(float); - UNPACK_PUSH(rb_float_new((double)tmp)); + UNPACK_PUSH(DOUBLE2NUM((double)tmp)); } PACK_ITEM_ADJUST(); break; @@ -1648,7 +1648,7 @@ pack_unpack(VALUE str, VALUE fmt) memcpy(&tmp, s, sizeof(float)); s += sizeof(float); tmp = VTOHF(tmp,ftmp); - UNPACK_PUSH(rb_float_new((double)tmp)); + UNPACK_PUSH(DOUBLE2NUM((double)tmp)); } PACK_ITEM_ADJUST(); break; @@ -1662,7 +1662,7 @@ pack_unpack(VALUE str, VALUE fmt) memcpy(&tmp, s, sizeof(double)); s += sizeof(double); tmp = VTOHD(tmp,dtmp); - UNPACK_PUSH(rb_float_new(tmp)); + UNPACK_PUSH(DOUBLE2NUM(tmp)); } PACK_ITEM_ADJUST(); break; @@ -1674,7 +1674,7 @@ pack_unpack(VALUE str, VALUE fmt) double tmp; memcpy(&tmp, s, sizeof(double)); s += sizeof(double); - UNPACK_PUSH(rb_float_new(tmp)); + UNPACK_PUSH(DOUBLE2NUM(tmp)); } PACK_ITEM_ADJUST(); break; @@ -1688,7 +1688,7 @@ pack_unpack(VALUE str, VALUE fmt) memcpy(&tmp, s, sizeof(float)); s += sizeof(float); tmp = NTOHF(tmp,ftmp); - UNPACK_PUSH(rb_float_new((double)tmp)); + UNPACK_PUSH(DOUBLE2NUM((double)tmp)); } PACK_ITEM_ADJUST(); break; @@ -1702,7 +1702,7 @@ pack_unpack(VALUE str, VALUE fmt) memcpy(&tmp, s, sizeof(double)); s += sizeof(double); tmp = NTOHD(tmp,dtmp); - UNPACK_PUSH(rb_float_new(tmp)); + UNPACK_PUSH(DOUBLE2NUM(tmp)); } PACK_ITEM_ADJUST(); break; diff --git a/parse.y b/parse.y index 385bc27606..eb3a250120 100644 --- a/parse.y +++ b/parse.y @@ -6694,7 +6694,7 @@ parser_yylex(struct parser_params *parser) rb_warnS("Float %s out of range", tok()); errno = 0; } - set_yylval_literal(rb_float_new(d)); + set_yylval_literal(DOUBLE2NUM(d)); return tFLOAT; } set_yylval_literal(rb_cstr_to_inum(tok(), 10, Qfalse)); @@ -8269,7 +8269,7 @@ negate_lit(NODE *node) node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); break; case T_FLOAT: - RFLOAT(node->nd_lit)->value = -RFLOAT(node->nd_lit)->value; + RFLOAT(node->nd_lit)->double_value = -RFLOAT_VALUE(node->nd_lit); break; default: break; diff --git a/process.c b/process.c index faffc61097..c78123c799 100644 --- a/process.c +++ b/process.c @@ -3780,10 +3780,10 @@ rb_proc_times(VALUE obj) times(&buf); return rb_struct_new(S_Tms, - utime = rb_float_new(buf.tms_utime / hertz), - stime = rb_float_new(buf.tms_stime / hertz), - cutime = rb_float_new(buf.tms_cutime / hertz), - sctime = rb_float_new(buf.tms_cstime / hertz)); + utime = DOUBLE2NUM(buf.tms_utime / hertz), + stime = DOUBLE2NUM(buf.tms_stime / hertz), + cutime = DOUBLE2NUM(buf.tms_cutime / hertz), + sctime = DOUBLE2NUM(buf.tms_cstime / hertz)); #else rb_notimplement(); #endif diff --git a/random.c b/random.c index 78174ec69a..4e29ff11a5 100644 --- a/random.c +++ b/random.c @@ -437,14 +437,14 @@ rb_f_rand(int argc, VALUE *argv, VALUE obj) rb_scan_args(argc, argv, "01", &vmax); switch (TYPE(vmax)) { case T_FLOAT: - if (RFLOAT(vmax)->value <= LONG_MAX && RFLOAT(vmax)->value >= LONG_MIN) { - max = (long)RFLOAT(vmax)->value; + if (RFLOAT_VALUE(vmax) <= LONG_MAX && RFLOAT_VALUE(vmax) >= LONG_MIN) { + max = (long)RFLOAT_VALUE(vmax); break; } - if (RFLOAT(vmax)->value < 0) - vmax = rb_dbl2big(-RFLOAT(vmax)->value); + if (RFLOAT_VALUE(vmax) < 0) + vmax = rb_dbl2big(-RFLOAT_VALUE(vmax)); else - vmax = rb_dbl2big(RFLOAT(vmax)->value); + vmax = rb_dbl2big(RFLOAT_VALUE(vmax)); /* fall through */ case T_BIGNUM: bignum: @@ -457,7 +457,7 @@ rb_f_rand(int argc, VALUE *argv, VALUE obj) limit = (struct RBignum *)rb_big_minus((VALUE)limit, INT2FIX(1)); if (FIXNUM_P((VALUE)limit)) { if (FIX2LONG((VALUE)limit) == -1) - return rb_float_new(genrand_real()); + return DOUBLE2NUM(genrand_real()); return LONG2NUM(limited_rand(FIX2LONG((VALUE)limit))); } return limited_big_rand(limit); @@ -474,7 +474,7 @@ rb_f_rand(int argc, VALUE *argv, VALUE obj) } if (max == 0) { - return rb_float_new(genrand_real()); + return DOUBLE2NUM(genrand_real()); } if (max < 0) max = -max; val = limited_rand(max-1); diff --git a/sprintf.c b/sprintf.c index f9b3d568e4..643314dc37 100644 --- a/sprintf.c +++ b/sprintf.c @@ -550,11 +550,11 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) bin_retry: switch (TYPE(val)) { case T_FLOAT: - if (FIXABLE((long)RFLOAT(val)->value)) { - val = LONG2FIX((long)RFLOAT(val)->value); + if (FIXABLE((long)RFLOAT_VALUE(val))) { + val = LONG2FIX((long)RFLOAT_VALUE(val)); goto bin_retry; } - val = rb_dbl2big(RFLOAT(val)->value); + val = rb_dbl2big(RFLOAT_VALUE(val)); if (FIXNUM_P(val)) goto bin_retry; bignum = 1; break; @@ -756,7 +756,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) int i, need = 6; char fbuf[32]; - fval = RFLOAT(rb_Float(val))->value; + fval = RFLOAT_VALUE(rb_Float(val)); if (isnan(fval) || isinf(fval)) { const char *expr; diff --git a/string.c b/string.c index 4ff50a776d..286c56a93a 100644 --- a/string.c +++ b/string.c @@ -2839,7 +2839,7 @@ rb_str_to_i(int argc, VALUE *argv, VALUE str) static VALUE rb_str_to_f(VALUE str) { - return rb_float_new(rb_str_to_dbl(str, Qfalse)); + return DOUBLE2NUM(rb_str_to_dbl(str, Qfalse)); } diff --git a/time.c b/time.c index e22ac7367d..d2f9a729e8 100644 --- a/time.c +++ b/time.c @@ -173,15 +173,15 @@ time_timeval(VALUE time, int interval) break; case T_FLOAT: - if (interval && RFLOAT(time)->value < 0.0) + if (interval && RFLOAT_VALUE(time) < 0.0) rb_raise(rb_eArgError, "%s must be positive", tstr); else { double f, d; - d = modf(RFLOAT(time)->value, &f); + d = modf(RFLOAT_VALUE(time), &f); t.tv_sec = (time_t)f; if (f != t.tv_sec) { - rb_raise(rb_eRangeError, "%f out of Time range", RFLOAT(time)->value); + rb_raise(rb_eRangeError, "%f out of Time range", RFLOAT_VALUE(time)); } t.tv_usec = (time_t)(d*1e6+0.5); } @@ -868,7 +868,7 @@ time_to_f(VALUE time) struct time_object *tobj; GetTimeval(time, tobj); - return rb_float_new((double)tobj->tv.tv_sec+(double)tobj->tv.tv_usec/1e6); + return DOUBLE2NUM((double)tobj->tv.tv_sec+(double)tobj->tv.tv_usec/1e6); } /* @@ -1324,7 +1324,7 @@ time_minus(VALUE time1, VALUE time2) f += ((double)tobj->tv.tv_usec - (double)tobj2->tv.tv_usec)*1e-6; /* XXX: should check float overflow on 64bit time_t platforms */ - return rb_float_new(f); + return DOUBLE2NUM(f); } return time_add(tobj, time2, -1); } -- cgit v1.2.3