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

ruby-changes:19929

From: tadf <ko1@a...>
Date: Fri, 10 Jun 2011 01:08:49 +0900 (JST)
Subject: [ruby-changes:19929] tadf:r31976 (trunk): * ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.

tadf	2011-06-10 01:08:38 +0900 (Fri, 10 Jun 2011)

  New Revision: 31976

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

  Log:
    * ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.

  Modified files:
    trunk/ChangeLog
    trunk/ext/bigdecimal/bigdecimal.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31975)
+++ ChangeLog	(revision 31976)
@@ -1,3 +1,7 @@
+Fri Jun 10 01:06:29 2011  Tadayoshi Funaba  <tadf@d...>
+
+	* ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
+
 Fri Jun 10 00:35:12 2011  Tadayoshi Funaba  <tadf@d...>
 
 	* complex.c (string_to_c_internal): uses rb_reg_nth_match;
Index: ext/bigdecimal/bigdecimal.c
===================================================================
--- ext/bigdecimal/bigdecimal.c	(revision 31975)
+++ ext/bigdecimal/bigdecimal.c	(revision 31976)
@@ -564,19 +564,24 @@
 	VALUE a = BigDecimal_split(self);
 	VALUE digits = RARRAY_PTR(a)[1];
 	VALUE numerator = rb_funcall(digits, rb_intern("to_i"), 0);
+	VALUE ret;
 	ssize_t dpower = e - (ssize_t)RSTRING_LEN(digits);
 
 	if (VpGetSign(p) < 0) {
 	    numerator = rb_funcall(numerator, '*', 1, INT2FIX(-1));
 	}
 	if (dpower < 0) {
-	    return rb_funcall(numerator, rb_intern("div"), 1,
+	    ret = rb_funcall(numerator, rb_intern("div"), 1,
 			      rb_funcall(INT2FIX(10), rb_intern("**"), 1,
 					 INT2FIX(-dpower)));
 	}
-        return rb_funcall(numerator, '*', 1,
-			  rb_funcall(INT2FIX(10), rb_intern("**"), 1,
-				     INT2FIX(dpower)));
+	else
+	    ret = rb_funcall(numerator, '*', 1,
+			     rb_funcall(INT2FIX(10), rb_intern("**"), 1,
+					INT2FIX(dpower)));
+	if (TYPE(ret) == T_FLOAT)
+	    rb_raise(rb_eFloatDomainError, "Infinity");
+	return ret;
     }
 }
 

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

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