[前][次][番号順一覧][スレッド一覧]

ruby-changes:2422

From: ko1@a...
Date: 14 Nov 2007 01:01:21 +0900
Subject: [ruby-changes:2422] ko1 - Ruby:r13913 (trunk): * include/ruby/ruby.h: introduce 2 macros:

ko1	2007-11-14 01:00:53 +0900 (Wed, 14 Nov 2007)

  New Revision: 13913

  Modified files:
    trunk/ChangeLog
    trunk/bignum.c
    trunk/ext/dl/mkcallback.rb
    trunk/ext/json/ext/generator/generator.c
    trunk/include/ruby/ruby.h
    trunk/insns.def
    trunk/marshal.c
    trunk/math.c
    trunk/numeric.c
    trunk/object.c
    trunk/pack.c
    trunk/parse.y
    trunk/process.c
    trunk/random.c
    trunk/sprintf.c
    trunk/string.c
    trunk/time.c

  Log:
    * 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.
    


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/time.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/ruby.h?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/json/ext/generator/generator.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/math.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bignum.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/sprintf.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/marshal.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/dl/mkcallback.rb?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/random.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/object.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insns.def?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/process.c?r1=13913&r2=13912
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/pack.c?r1=13913&r2=13912

Index: math.c
===================================================================
--- math.c	(revision 13912)
+++ math.c	(revision 13913)
@@ -55,7 +55,7 @@
 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 @@
 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 @@
 {
     Need_Float(x);
 
-    return rb_float_new(sin(RFLOAT(x)->value));
+    return DOUBLE2NUM(sin(RFLOAT_VALUE(x)));
 }
 
 
@@ -103,7 +103,7 @@
 {
     Need_Float(x);
 
-    return rb_float_new(tan(RFLOAT(x)->value));
+    return DOUBLE2NUM(tan(RFLOAT_VALUE(x)));
 }
 
 /*
@@ -120,9 +120,9 @@
 
     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 @@
 
     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 @@
 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 @@
 {
     Need_Float(x);
     
-    return rb_float_new(cosh(RFLOAT(x)->value));
+    return DOUBLE2NUM(cosh(RFLOAT_VALUE(x)));
 }
 
 #ifndef HAVE_SINH
@@ -201,7 +201,7 @@
 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 @@
 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 @@
 
     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 @@
 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 @@
 
     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 @@
 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 @@
     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 @@
 
     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 @@
 
     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 @@
 
     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 @@
 
     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 @@
 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 @@
 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 @@
 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 @@
 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 @@
     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);
Index: time.c
===================================================================
--- time.c	(revision 13912)
+++ time.c	(revision 13913)
@@ -173,15 +173,15 @@
 	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 @@
     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 @@
 	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);
 }
Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 13912)
+++ include/ruby/ruby.h	(revision 13913)
@@ -451,8 +451,10 @@
 
 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
 
Index: insns.def
===================================================================
--- insns.def	(revision 13912)
+++ insns.def	(revision 13913)
@@ -1391,7 +1391,7 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 		mod += y;
 		div -= 1.0;
 	    }
-	    val = rb_float_new(mod);
+	    val = DOUBLE2NUM(mod);
 	}
 	else {
 	    goto INSN_LABEL(normal_dispatch);
@@ -1678,8 +1678,8 @@
 	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;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13912)
+++ ChangeLog	(revision 13913)
@@ -1,3 +1,17 @@
+Wed Nov 14 00:33:49 2007  Koichi Sasada  <ko1@a...>
+
+	* 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  <nobu@r...>
 
 	* tool/ytab.sed: get rid of GNU sed feature.  a patch from Laurent
Index: string.c
===================================================================
--- string.c	(revision 13912)
+++ string.c	(revision 13913)
@@ -2839,7 +2839,7 @@
 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));
 }
 
 
Index: object.c
===================================================================
--- object.c	(revision 13912)
+++ object.c	(revision 13913)
@@ -755,7 +755,7 @@
 static VALUE
 nil_to_f(VALUE obj)
 {
-    return rb_float_new(0.0);
+    return DOUBLE2NUM(0.0);
 }
 
 /*
@@ -1950,11 +1950,11 @@
 
     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 @@
 {
     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 @@
       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 @@
 {
     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 @@
 	break;
     }
 
-    return RFLOAT(rb_Float(val))->value;
+    return RFLOAT_VALUE(rb_Float(val));
 }
 
 char*
Index: pack.c
===================================================================
--- pack.c	(revision 13912)
+++ pack.c	(revision 13913)
@@ -768,7 +768,7 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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 @@
 		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;
Index: sprintf.c
===================================================================
--- sprintf.c	(revision 13912)
+++ sprintf.c	(revision 13913)
@@ -550,11 +550,11 @@
 	      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 @@
 		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;
 
Index: parse.y
===================================================================
--- parse.y	(revision 13912)
+++ parse.y	(revision 13913)
@@ -6694,7 +6694,7 @@
 		    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 @@
 	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;
Index: process.c
===================================================================
--- process.c	(revision 13912)
+++ process.c	(revision 13913)
@@ -3780,10 +3780,10 @@
 
     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
Index: ext/dl/mkcallback.rb
===================================================================
--- ext/dl/mkcallback.rb	(revision 13912)
+++ ext/dl/mkcallback.rb	(revision 13913)
@@ -70,12 +70,12 @@
   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',
Index: ext/json/ext/generator/generator.c
===================================================================
--- ext/json/ext/generator/generator.c	(revision 13912)
+++ ext/json/ext/generator/generator.c	(revision 13913)
@@ -275,7 +275,7 @@
 {
     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)) {
Index: numeric.c
===================================================================
--- numeric.c	(revision 13912)
+++ numeric.c	(revision 13913)
@@ -465,7 +465,7 @@
     NEWOBJ(flt, struct RFloat);
     OBJSETUP(flt, rb_cFloat, T_FLOAT);
 
-    flt->value = d;
+    flt->double_value = d;
     return (VALUE)flt;
 }
 
@@ -483,7 +483,7 @@
 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 @@
 static VALUE
 flo_uminus(VALUE flt)
 {
-    return rb_float_new(-RFLOAT(flt)->value);
+    return DOUBLE2NUM(-RFLOAT_VALUE(flt));
 }
 
 /*
@@ -544,11 +544,11 @@
 {
     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 @@
 {
     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 @@
 {
     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 @@
     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 @@
 	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 @@
 	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 @@
     else {
 	a = rb_dbl2big(div);
     }
-    b = rb_float_new(mod);
+    b = DOUBLE2NUM(mod);
     return rb_assoc_new(a, b);
 }
 
@@ -748,11 +748,11 @@
 {
     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 @@
 	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 @@
     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 @@
 {
     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 @@
 	break;
 
       case T_FLOAT:
-	b = RFLOAT(y)->value;
+	b = RFLOAT_VALUE(y);
 	break;
 
       default:
@@ -910,7 +910,7 @@
 {
     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 @@
 	break;
 
       case T_FLOAT:
-	b = RFLOAT(y)->value;
+	b = RFLOAT_VALUE(y);
 	if (isnan(b)) return Qfalse;
 	break;
 
@@ -945,7 +945,7 @@
 {
     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 @@
 	break;
 
       case T_FLOAT:
-	b = RFLOAT(y)->value;
+	b = RFLOAT_VALUE(y);
 	if (isnan(b)) return Qfalse;
 	break;
 
@@ -979,7 +979,7 @@
 {
     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 @@
 	break;
 
       case T_FLOAT:
-	b = RFLOAT(y)->value;
+	b = RFLOAT_VALUE(y);
 	if (isnan(b)) return Qfalse;
 	break;
 
@@ -1014,7 +1014,7 @@
 {
     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 @@
 	break;
 
       case T_FLOAT:
-	b = RFLOAT(y)->value;
+	b = RFLOAT_VALUE(y);
 	if (isnan(b)) return Qfalse;
 	break;
 
@@ -1051,8 +1051,8 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
 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 @@
     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 @@
     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 @@
 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 @@
 	if (err>0.5) err=0.5;
 	n = floor(n + err) + 1;
 	for (i=0; i<n; i++) {
-	    rb_yield(rb_float_new(i*unit+beg));
+	    rb_yield(DOUBLE2NUM(i*unit+beg));
 	}
     }
     else {
@@ -1488,15 +1488,15 @@
 
     switch (TYPE(val)) {
       case T_FLOAT:
-	if (RFLOAT(val)->value <= (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 @@
 
     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 @@
       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 @@
 	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 @@
       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 @@
 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 @@
 	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 @@
 	{
 	    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 @@
 	    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 @@
 	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 @@
 	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 @@
 	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 @@
       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 @@
       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 @@
       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 @@
       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 @@
       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 @@
       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 @@
 
     val = (double)FIX2LONG(num);
 
-    return rb_float_new(val);
+    return DOUBLE2NUM(val);
 }
 
 /*
@@ -3183,9 +3183,9 @@
     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);
Index: bignum.c
===================================================================
--- bignum.c	(revision 13912)
+++ bignum.c	(revision 13913)
@@ -1147,7 +1147,7 @@
 static VALUE
 rb_big_to_f(VALUE x)
 {
-    return rb_float_new(rb_big2dbl(x));
+    return DOUBLE2NUM(rb_big2dbl(x));
 }
 
 /*
@@ -1174,7 +1174,7 @@
 	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 @@
 	{
 	    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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	    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 @@
 	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 @@
     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 @@
       default:
 	return rb_num_coerce_bin(x, y);
     }
-    return rb_float_new(pow(rb_big2dbl(x), d));
+    return DOUBLE2NUM(pow(rb_big2dbl(x), d));
 }
 
 /*
Index: marshal.c
===================================================================
--- marshal.c	(revision 13912)
+++ marshal.c	(revision 13913)
@@ -637,7 +637,7 @@
 
 	  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 @@
 		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);
 	}
Index: random.c
===================================================================
--- random.c	(revision 13912)
+++ random.c	(revision 13913)
@@ -437,14 +437,14 @@
     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 @@
             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 @@
     }
 
     if (max == 0) {
-	return rb_float_new(genrand_real());
+	return DOUBLE2NUM(genrand_real());
     }
     if (max < 0) max = -max;
     val = limited_rand(max-1);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]