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/