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

ruby-changes:4764

From: ko1@a...
Date: Fri, 2 May 2008 00:00:43 +0900 (JST)
Subject: [ruby-changes:4764] nobu - Ruby:r16258 (trunk): * bignum.c (rb_big_divide), numeric.c (fix_divide): check for result

nobu	2008-05-02 00:00:01 +0900 (Fri, 02 May 2008)

  New Revision: 16258

  Modified files:
    trunk/ChangeLog
    trunk/bignum.c
    trunk/numeric.c

  Log:
    * bignum.c (rb_big_divide), numeric.c (fix_divide): check for result
      domain.  [ruby-dev:34559]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=16258&r2=16257&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16258&r2=16257&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bignum.c?r1=16258&r2=16257&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16257)
+++ ChangeLog	(revision 16258)
@@ -1,3 +1,8 @@
+Thu May  1 23:59:59 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* bignum.c (rb_big_divide), numeric.c (fix_divide): check for result
+	  domain.  [ruby-dev:34559]
+
 Thu May  1 23:43:21 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* range.c (range_step): check if step can be converted to an integer.
Index: numeric.c
===================================================================
--- numeric.c	(revision 16257)
+++ numeric.c	(revision 16258)
@@ -2249,7 +2249,7 @@
 }
 
 static VALUE
-fix_divide(VALUE x, VALUE y, int flo)
+fix_divide(VALUE x, VALUE y, ID op)
 {
     if (FIXNUM_P(y)) {
 	long div;
@@ -2262,15 +2262,17 @@
 	x = rb_int2big(FIX2LONG(x));
 	return rb_big_div(x, y);
       case T_FLOAT:
-	if (flo) {
-	    return DOUBLE2NUM((double)FIX2LONG(x) / RFLOAT_VALUE(y));
+	{
+	    double div = (double)FIX2LONG(x) / RFLOAT_VALUE(y);
+	    if (op == '/') {
+		return DOUBLE2NUM(div);
+	    }
+	    else {
+		return rb_dbl2big(div);
+	    }
 	}
-	else {
-	    long div = (double)FIX2LONG(x) / RFLOAT_VALUE(y);
-	    return LONG2NUM(div);
-	}
       default:
-	return rb_num_coerce_bin(x, y, flo ? '/' : rb_intern("div"));
+	return rb_num_coerce_bin(x, y, op);
     }
 }
 
@@ -2286,7 +2288,7 @@
 static VALUE
 fix_div(VALUE x, VALUE y)
 {
-    return fix_divide(x, y, Qtrue);
+    return fix_divide(x, y, '/');
 }
 
 /*
@@ -2299,7 +2301,7 @@
 static VALUE
 fix_idiv(VALUE x, VALUE y)
 {
-    return fix_divide(x, y, Qfalse);
+    return fix_divide(x, y, rb_intern("div"));
 }
 
 /*
Index: bignum.c
===================================================================
--- bignum.c	(revision 16257)
+++ bignum.c	(revision 16258)
@@ -1821,7 +1821,7 @@
 		return DOUBLE2NUM(div);
 	    }
 	    else {
-		return LONG2NUM((long)div);
+		return rb_dbl2big(div);
 	    }
 	}
 

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

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