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

ruby-changes:2294

From: ko1@a...
Date: 26 Oct 2007 17:01:59 +0900
Subject: [ruby-changes:2294] nobu - Ruby:r13785 (trunk, ruby_1_8): * numeric.c (fix_pow): returns infinity for 0**-1.

nobu	2007-10-26 17:01:41 +0900 (Fri, 26 Oct 2007)

  New Revision: 13785

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/numeric.c
    branches/ruby_1_8/version.h
    trunk/ChangeLog
    trunk/numeric.c

  Log:
    * numeric.c (fix_pow): returns infinity for 0**-1.  [ruby-dev:32084]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/numeric.c?r1=13785&r2=13784
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13785&r2=13784
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13785&r2=13784
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/numeric.c?r1=13785&r2=13784
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/version.h?r1=13785&r2=13784

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13784)
+++ ChangeLog	(revision 13785)
@@ -1,3 +1,7 @@
+Fri Oct 26 17:01:34 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* numeric.c (fix_pow): returns infinity for 0**-1.  [ruby-dev:32084]
+
 Fri Oct 26 15:00:52 2007  Nobuyoshi Nakada  <nobu@r...>
 
 	* misc/ruby-style.el (ruby-style-{case,label}-indent): adjust for
Index: numeric.c
===================================================================
--- numeric.c	(revision 13784)
+++ numeric.c	(revision 13785)
@@ -2326,6 +2326,7 @@
 static VALUE
 fix_pow(VALUE x, VALUE y)
 {
+    static const double zero = 0.0;
     long a = FIX2LONG(x);
 
     if (FIXNUM_P(y)) {
@@ -2333,7 +2334,10 @@
 
 	if (b == 0) return INT2FIX(1);
 	if (b == 1) return x;
-	if (a == 0) return INT2FIX(0);
+	if (a == 0) {
+	    if (b > 0) return INT2FIX(0);
+	    return rb_float_new(1.0 / zero);
+	}
 	if (a == 1) return INT2FIX(1);
 	if (a == -1) {
 	    if (b % 2 == 0)
@@ -2357,7 +2361,9 @@
 	x = rb_int2big(FIX2LONG(x));
 	return rb_big_pow(x, y);
       case T_FLOAT:
-	if (a == 0) return rb_float_new(0.0);
+	if (a == 0) {
+	    return rb_float_new(RFLOAT(y)->value < 0 ? (1.0 / zero) : 0.0);
+	}
 	if (a == 1) return rb_float_new(1.0);
 	return rb_float_new(pow((double)a, RFLOAT(y)->value));
       default:
Index: ruby_1_8/numeric.c
===================================================================
--- ruby_1_8/numeric.c	(revision 13784)
+++ ruby_1_8/numeric.c	(revision 13785)
@@ -2243,6 +2243,7 @@
 fix_pow(x, y)
     VALUE x, y;
 {
+    static const double zero = 0.0;
     long a = FIX2LONG(x);
 
     if (FIXNUM_P(y)) {
@@ -2252,7 +2253,10 @@
 	if (b == 0) return INT2FIX(1);
 	if (b == 1) return x;
 	a = FIX2LONG(x);
-	if (a == 0) return INT2FIX(0);
+	if (a == 0) {
+	    if (b > 0) return INT2FIX(0);
+	    return rb_float_new(1.0 / zero);
+	}
 	if (a == 1) return INT2FIX(1);
 	if (a == -1) {
 	    if (b % 2 == 0)
@@ -2276,7 +2280,9 @@
 	x = rb_int2big(FIX2LONG(x));
 	return rb_big_pow(x, y);
       case T_FLOAT:
-	if (a == 0) return rb_float_new(0.0);
+	if (a == 0) {
+	    return rb_float_new(RFLOAT(y)->value < 0 ? (1.0 / zero) : 0.0);
+	}
 	if (a == 1) return rb_float_new(1.0);
 	return rb_float_new(pow((double)a, RFLOAT(y)->value));
       default:
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 13784)
+++ ruby_1_8/ChangeLog	(revision 13785)
@@ -1,3 +1,7 @@
+Fri Oct 26 17:01:34 2007  Nobuyoshi Nakada  <nobu@r...>
+
+	* numeric.c (fix_pow): returns infinity for 0**-1.  [ruby-dev:32084]
+
 Wed Oct 25 07:18:09 2007  James Edward Gray II  <jeg2@r...>
 
 	Merged 13781 from trunk.
Index: ruby_1_8/version.h
===================================================================
--- ruby_1_8/version.h	(revision 13784)
+++ ruby_1_8/version.h	(revision 13785)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.8.6"
-#define RUBY_RELEASE_DATE "2007-10-25"
+#define RUBY_RELEASE_DATE "2007-10-26"
 #define RUBY_VERSION_CODE 186
-#define RUBY_RELEASE_CODE 20071025
+#define RUBY_RELEASE_CODE 20071026
 #define RUBY_PATCHLEVEL 5000
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 6
 #define RUBY_RELEASE_YEAR 2007
 #define RUBY_RELEASE_MONTH 10
-#define RUBY_RELEASE_DAY 25
+#define RUBY_RELEASE_DAY 26
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];

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

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