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

ruby-changes:8847

From: matz <ko1@a...>
Date: Fri, 28 Nov 2008 02:20:37 +0900 (JST)
Subject: [ruby-changes:8847] Ruby:r20383 (trunk): * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal

matz	2008-11-28 02:20:08 +0900 (Fri, 28 Nov 2008)

  New Revision: 20383

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

  Log:
    * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
      division (including modulo) should raise ZeroDivisionError as
      integer division. [incompatible]

  Modified files:
    trunk/ChangeLog
    trunk/ext/bigdecimal/bigdecimal.c
    trunk/test/bigdecimal/test_bigdecimal.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20382)
+++ ChangeLog	(revision 20383)
@@ -1,3 +1,9 @@
+Fri Nov 28 02:18:47 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
+	  division (including modulo) should raise ZeroDivisionError as
+	  integer division. [incompatible]
+
 Fri Nov 28 00:12:00 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* numeric.c (flodivmod): floating point division should raise
Index: ext/bigdecimal/bigdecimal.c
===================================================================
--- ext/bigdecimal/bigdecimal.c	(revision 20382)
+++ ext/bigdecimal/bigdecimal.c	(revision 20383)
@@ -1012,7 +1012,9 @@
 
     if(VpIsNaN(a) || VpIsNaN(b)) goto NaN;
     if(VpIsInf(a) || VpIsInf(b)) goto NaN;
-    if(VpIsZero(b))              goto NaN;
+    if(VpIsZero(b)) {
+	rb_raise(rb_eZeroDivError, "divided by 0");
+    }
     if(VpIsZero(a)) {
        GUARD_OBJ(c,VpCreateRbObject(1, "0"));
        GUARD_OBJ(d,VpCreateRbObject(1, "0"));
@@ -1169,9 +1171,6 @@
        Real *mod;
        obj = BigDecimal_DoDivmod(self,b,&div,&mod);
        if(obj!=(VALUE)0) return obj;
-       if(VpIsNaN(div) && rb_equal(b, INT2FIX(0))) {
-	   rb_raise(rb_eZeroDivError, "divided by 0");
-       }
        return BigDecimal_to_i(ToValue(div));
     } else {    /* div in BigDecimal sense */
        U_LONG ix = (U_LONG)GetPositiveInt(n);
Index: test/bigdecimal/test_bigdecimal.rb
===================================================================
--- test/bigdecimal/test_bigdecimal.rb	(revision 20382)
+++ test/bigdecimal/test_bigdecimal.rb	(revision 20383)
@@ -419,9 +419,7 @@
     assert_equal([0, 0], BigDecimal.new("0").divmod(2))
 
     BigDecimal.mode(BigDecimal::EXCEPTION_NaN, false)
-    a, b = BigDecimal.new("0").divmod(0)
-    assert_equal(true, a.nan?)
-    assert_equal(true, b.nan?)
+    assert_raise(ZeroDivisionError){BigDecimal.new("0").divmod(0)}
   end
 
   def test_add_bigdecimal

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

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