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

ruby-changes:16890

From: nobu <ko1@a...>
Date: Fri, 6 Aug 2010 20:12:51 +0900 (JST)
Subject: [ruby-changes:16890] Ruby:r28886 (trunk): * rational.c (nurat_div): divided by float zero should be

nobu	2010-08-06 20:12:35 +0900 (Fri, 06 Aug 2010)

  New Revision: 28886

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

  Log:
    * rational.c (nurat_div): divided by float zero should be
      infinity.  [ruby-core:31626]

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

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28885)
+++ ChangeLog	(revision 28886)
@@ -1,3 +1,8 @@
+Fri Aug  6 20:12:28 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* rational.c (nurat_div): divided by float zero should be
+	  infinity.  [ruby-core:31626]
+
 Fri Aug  6 18:59:23 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* file.c (realpath_rec): rb_str_modify depends on the length, so
Index: test/ruby/test_rational.rb
===================================================================
--- test/ruby/test_rational.rb	(revision 28885)
+++ test/ruby/test_rational.rb	(revision 28886)
@@ -297,6 +297,8 @@
 
     assert_raise(ZeroDivisionError){Rational(1, 3) / 0}
     assert_raise(ZeroDivisionError){Rational(1, 3) / Rational(0)}
+
+    assert((Rational(1, 3) / 0.0).infinite?, '[ruby-core:31626]')
   end
 
   def assert_eql(exp, act, *args)
@@ -546,6 +548,7 @@
 
     assert_equal(0.25, c.fdiv(2))
     assert_equal(0.25, c.fdiv(2.0))
+    assert(c.fdiv(0).infinite?, '[ruby-core:31626]')
   end
 
   def test_expt
@@ -1067,6 +1070,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(Rational(1,2).quo(0.0).infinite?, '[ruby-core:31626]')
 
     assert_equal(0.5, 1.fdiv(2))
     assert_equal(5000000000.0, 10000000000.fdiv(2))
Index: rational.c
===================================================================
--- rational.c	(revision 28885)
+++ rational.c	(revision 28886)
@@ -882,7 +882,7 @@
 		    return DBL2NUM(-INFINITY);
 		}
 	    }
-	    if (modf(x, &den) == 0.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/

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