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

ruby-changes:12340

From: tadf <ko1@a...>
Date: Sun, 12 Jul 2009 20:47:51 +0900 (JST)
Subject: [ruby-changes:12340] Ruby:r24035 (trunk): * numeric.c (fix_divide): added an entry to rational.

tadf	2009-07-12 20:46:40 +0900 (Sun, 12 Jul 2009)

  New Revision: 24035

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

  Log:
    * numeric.c (fix_divide): added an entry to rational.
    * rational.c (rb_rational_reciprocal): added.
    
    * complex.c (f_reciprocal): added.

  Modified files:
    trunk/ChangeLog
    trunk/complex.c
    trunk/numeric.c
    trunk/rational.c

Index: complex.c
===================================================================
--- complex.c	(revision 24034)
+++ complex.c	(revision 24035)
@@ -812,6 +812,12 @@
     return m_exp(f_mul(m_log(x), y));
 }
 
+inline static VALUE
+f_reciprocal(VALUE x)
+{
+    return f_quo(ONE, x);
+}
+
 /*
  * call-seq:
  *    cmp ** numeric  ->  complex
@@ -879,7 +885,7 @@
 	    }
 	    return z;
 	}
-	return f_expt(f_div(f_to_r(ONE), self), f_negate(other));
+	return f_expt(f_reciprocal(self), f_negate(other));
     }
     if (k_numeric_p(other) && f_real_p(other)) {
 	VALUE r, theta;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24034)
+++ ChangeLog	(revision 24035)
@@ -1,3 +1,11 @@
+Sun Jul 12 20:42:58 2009  Tadayoshi Funaba  <tadf@d...>
+
+	* numeric.c (fix_divide): added an entry to rational.
+
+	* rational.c (rb_rational_reciprocal): added.
+
+	* complex.c (f_reciprocal): added.
+
 Sun Jul 12 02:24:42 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* random.c (rand_init): use fixed buffer for small numbers.
Index: numeric.c
===================================================================
--- numeric.c	(revision 24034)
+++ numeric.c	(revision 24035)
@@ -2268,6 +2268,8 @@
     }
 }
 
+VALUE rb_rational_reciprocal(VALUE x);
+
 static VALUE
 fix_divide(VALUE x, VALUE y, ID op)
 {
@@ -2295,6 +2297,10 @@
 		return rb_dbl2big(floor(div));
 	    }
 	}
+      case T_RATIONAL:
+	if (op == '/' && FIX2LONG(x) == 1)
+	    return rb_rational_reciprocal(y);
+	return rb_funcall(rb_rational_new1(x), op, 1, y);
       default:
 	return rb_num_coerce_bin(x, y, op);
     }
Index: rational.c
===================================================================
--- rational.c	(revision 24034)
+++ rational.c	(revision 24035)
@@ -1428,6 +1428,13 @@
 
 /* --- */
 
+VALUE
+rb_rational_reciprocal(VALUE x)
+{
+    get_dat1(x);
+    return f_rational_new_no_reduce2(CLASS_OF(x), dat->den, dat->num);
+}
+
 /*
  * call-seq:
  *    int.gcd(int2)  ->  integer

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

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