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

ruby-changes:16891

From: nobu <ko1@a...>
Date: Fri, 6 Aug 2010 20:14:03 +0900 (JST)
Subject: [ruby-changes:16891] Ruby:r28887 (trunk): * rational.c (nurat_div): divided by infinity should be zero.

nobu	2010-08-06 20:13:48 +0900 (Fri, 06 Aug 2010)

  New Revision: 28887

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28887

  Log:
    * rational.c (nurat_div): divided by infinity should be zero.

  Modified files:
    trunk/ChangeLog
    trunk/rational.c
    trunk/test/ruby/test_rational.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28886)
+++ ChangeLog	(revision 28887)
@@ -1,5 +1,7 @@
-Fri Aug  6 20:12:28 2010  Nobuyoshi Nakada  <nobu@r...>
+Fri Aug  6 20:13:42 2010  Nobuyoshi Nakada  <nobu@r...>
 
+	* rational.c (nurat_div): divided by infinity should be zero.
+
 	* rational.c (nurat_div): divided by float zero should be
 	  infinity.  [ruby-core:31626]
 
Index: test/ruby/test_rational.rb
===================================================================
--- test/ruby/test_rational.rb	(revision 28886)
+++ test/ruby/test_rational.rb	(revision 28887)
@@ -298,6 +298,7 @@
     assert_raise(ZeroDivisionError){Rational(1, 3) / 0}
     assert_raise(ZeroDivisionError){Rational(1, 3) / Rational(0)}
 
+    assert_equal(0, Rational(1, 3) / Float::INFINITY)
     assert((Rational(1, 3) / 0.0).infinite?, '[ruby-core:31626]')
   end
 
@@ -548,6 +549,7 @@
 
     assert_equal(0.25, c.fdiv(2))
     assert_equal(0.25, c.fdiv(2.0))
+    assert_equal(0, c.fdiv(Float::INFINITY))
     assert(c.fdiv(0).infinite?, '[ruby-core:31626]')
   end
 
@@ -1070,6 +1072,7 @@
     assert_equal(Rational(5000000000), 10000000000.quo(2))
     assert_equal(0.5, 1.0.quo(2))
     assert_equal(Rational(1,4), Rational(1,2).quo(2))
+    assert_equal(0, Rational(1,2).quo(Float::INFINITY))
     assert(Rational(1,2).quo(0.0).infinite?, '[ruby-core:31626]')
 
     assert_equal(0.5, 1.fdiv(2))
Index: rational.c
===================================================================
--- rational.c	(revision 28886)
+++ rational.c	(revision 28887)
@@ -874,14 +874,7 @@
 	    get_dat1(self);
 
 	    if (isnan(x)) return DBL2NUM(NAN);
-	    if (isinf(x)) {
-		if (RTEST(f_negative_p(dat->num)) == (x < 0)) {
-		    return DBL2NUM(INFINITY);
-		}
-		else {
-		    return DBL2NUM(-INFINITY);
-		}
-	    }
+	    if (isinf(x)) return INT2FIX(0);
 	    if (x != 0.0 && modf(x, &den) == 0.0) {
 		return rb_rational_raw2(dat->num, f_mul(rb_dbl2big(den), dat->den));
 	    }

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

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