From: TOYOFUKU Chikanobu Date: 2008-09-19T19:23:47+09:00 Subject: [ruby-dev:36393] Re: mathn (#**) 豊福です。 > --- bignum.c (revision 19423) > +++ bignum.c (working copy) > @@ -2099,11 +2099,13 @@ > switch (TYPE(y)) { ... > case T_BIGNUM: > - if (rb_funcall(y, '<', 1, INT2FIX(0))) > - return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y); > + if (!RBIGNUM_SIGN(y) && !BIGZEROP(y)) > + return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y); > > rb_warn("in a**b, b may be too big"); > d = rb_big2dbl(y); y が正の場合はあっさり double にしているのに負の場合は有理数 で頑張るというのは不公平な気がします。 ところで ruby -e 'p((-10**20)**-0.5)' は (0-1.0e-10i) ではなく (6.12303176911189e-27-1.0e-10i) なんですね。 一度極座標に変換するので偏角の誤差はしょうがないか。 ---