Mathn (#**)

mahtn e$B$7$?>l9g!"e(B

(-8) ** Rational(1,3) #=> (1.0+1.73205080756888i)

e$B$H$J$j$^$9$,e(B (1.8e$B!"e(B1.9 e$B$H$b$Ke(B)e$B!"e(B

(-8.0) ** Rational(1,3) e$B$d!"e(B(-8) ** (1.0/3) e$B$Oe(B NaN
e$B$K$J$j$^$9!#e(B

e$B:#$4$m5$$E$$$?$N$G$9$,!"e(BFloat
e$B$G$NDj5A$,$J$$$G$9!#2C$($F!“e(BInteger e$B$N>le(B
e$B9g$b1&JU$,e(B Rational e$B$G$”$l$P!"e(B

            (-8)  ** Rational(1,3) ->
    Rational(-8)  ** Rational(1,3) ->

Complex(Rational(-8)) ** Rational(1,3)

e$B$H$$$&=q$-49$($r7P$FK>$_$N7k2L$,F@$i$l$k$H$$$&$@$1$G!"$:$P$je(B
Integer e$B$Ge(B
e$B$N$A$c$s$H$7$?Dj5A$O$J$$$G$9!#e(B

e$BAL$k$He(B 1.6.x e$B;~Be$K$O!"e(Brequire ‘complex’
e$B$7$?>l9g$K!"Dj5A$5$l$F$$$?$h$&e(B
e$B$G$9!#e(B

1.6.8> (-8) ** (1.0/3) #=> Complex(1, 1.732050808)
1.8.0> (-8) ** (1.0/3) #=> NaN

e$B$3$N$"$?$j$N=$@5$,$i$_$G!"e(Bmathn
e$B;~$N>l9g$N8z2L$H$b$I$b>C$($F$7$^$C$?$Ne(B
e$B$+$b$7$l$^$;$s!#e(B

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev :36325 ] the message: "[ruby-dev:36325] mathn (#**) ", on
Sep/16 20:08(JST) Tadayoshi F. writes:

mahtn e$B$7$?>l9g!"e(B
(-8) ** Rational(1,3) #=> (1.0+1.73205080756888i)
e$B$H$J$j$^$9$,e(B (1.8e$B!"e(B1.9 e$B$H$b$Ke(B)e$B!"e(B

(e$BCfN,e(B)

e$BAL$k$He(B 1.6.x e$B;~Be$K$O!"e(Brequire ‘complex’ e$B$7$?>l9g$K!"Dj5A$5$l$F$$$?$h$&e(B
e$B$G$9!#e(B

1.6.8> (-8) ** (1.0/3) #=> Complex(1, 1.732050808)
1.8.0> (-8) ** (1.0/3) #=> NaN

e$B$3$N$"$?$j$N=$@5$,$i$_$G!"e(Bmathn e$B;~$N>l9g$N8z2L$H$b$I$b>C$($F$7$^$C$?$Ne(B
e$B$+$b$7$l$^$;$s!#e(B

e$B>C$7$?$N$Oe(B [ruby-dev: 20780] e$B$+$i$N%9%l%C%I$J$N$G$9$,e(B,
e$B$=$NCf$G>C$7$Fe(B
e$B$b<h$j$"$($:Bg$-$JLdBj$O$J$$$H8@$&$3$H$Ge(B,
e$B>C$7$F$7$^$C$?$^$^$J$N$@$H;We(B
e$B$$$^$9e(B.

[ruby-dev: 20787] e$B$G?70F$,=P$F$$$^$9$,e(B…

e$B$$$^$Oe(B, complexe$B$,AH$9~$$K$J$C$Fe(B,
CMathe$B$,30$K=P$F$$$k$N$Ge(B(e$BHyL/$G$9$,e(B)
e$B$^$?0c$C$?J}?K$,$"$k5$$,$7$^$9e(B.

__
---------------------------------------------------->> e$B@PDMe(B
e$B7=<ye(B <<—
---------------------------------->> e-mail: [email protected] <<—

e$B>C$7$?$N$Oe(B [ruby-dev: 20780] e$B$+$i$N%9%l%C%I$J$N$G$9$,e(B, e$B$=$NCf$G>C$7$Fe(B
e$B$b<h$j$"$($:Bg$-$JLdBj$O$J$$$H8@$&$3$H$Ge(B, e$B>C$7$F$7$^$C$?$^$^$J$N$@$H;We(B
e$B$$$^$9e(B.

e$B0lC6:o=|$9$k$,$$$E$l:FDj5A$9$k$H$$$&OC$K$J$C$F$$$?$h$&$G$9$M!#e(B
complex.rb e$B$G0lN’$K!"e(BComplex e$B$rJV$9$h$&$K$9$k$N$O$H$b$+$/e(B
(e$BKM$b$=$l$OH?e(B
e$BBP$G$9e(B)e$B!"e(B

(-2)**2 #=> 4
(-2)**Rational(1,2) #=> Complex(8.65927457071936e-17, 1.4142135623731)

e$B$H$^$,$j$J$j$K$b6hJL$O$G$-$F$$$k$o$1$G$9$+$i!"e(BInteger e$B$He(B
Float e$B$NDj5A$re(B
e$B$b$&>/$7E0Dl$9$l$P$h$$$N$G$O$J$$$G$7$g$&$+!#e(B

[ruby-dev: 20787] e$B$G?70F$,=P$F$$$^$9$,e(B…

e$B$$$^$Oe(B, complexe$B$,AH$9~$$K$J$C$Fe(B, CMathe$B$,30$K=P$F$$$k$N$Ge(B(e$BHyL/$G$9$,e(B)
e$B$^$?0c$C$?J}?K$,$"$k5$$,$7$^$9e(B.

e$B:G=i$NEDCf$5$NITK~e(B ((-2)**2 => Complex(4, 0)) e$B$G$9$,!“e(B1.6.x
e$B$NDj5A$G$b!“e(B
mathn e$B$NCf$G$J$i!”@55,2=$5$l$Fe(B 4
e$B$K$J$j$^$9$7!”:#8=:_!"e(Bmathn.rb e$B$GDj5Ae(B
e$B$9$kJ,$K$O!"LdBj$O$J$$$N$G$Oe(B?

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev :36338 ] the message: "[ruby-dev:36338] Re: mathn (#**)
", on Sep/17 07:12(JST) Tadayoshi F. writes:

e$B0lC6:o=|$9$k$,$$$E$l:FDj5A$9$k$H$$$&OC$K$J$C$F$$$?$h$&$G$9$M!#e(B
complex.rb e$B$G0lN’$K!"e(BComplex e$B$rJV$9$h$&$K$9$k$N$O$H$b$+$/e(B (e$BKM$b$=$l$OH?e(B
e$BBP$G$9e(B)e$B!"e(B

(-2)**2 #=> 4
(-2)**Rational(1,2) #=> Complex(8.65927457071936e-17, 1.4142135623731)

e$B$H$^$,$j$J$j$K$b6hJL$O$G$-$F$$$k$o$1$G$9$+$i!"e(BInteger e$B$He(B Float e$B$NDj5A$re(B
e$B$b$&>/$7E0Dl$9$l$P$h$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$@$H;W$$$^$9e(B.

[ruby-dev: 20787] e$B$G?70F$,=P$F$$$^$9$,e(B…

e$B$$$^$Oe(B, complexe$B$,AH$9~$$K$J$C$Fe(B, CMathe$B$,30$K=P$F$$$k$N$Ge(B(e$BHyL/$G$9$,e(B)
e$B$^$?0c$C$?J}?K$,$"$k5$$,$7$^$9e(B.

e$B:G=i$NEDCf$5$NITK~e(B ((-2)**2 => Complex(4, 0)) e$B$G$9$,!“e(B1.6.x e$B$NDj5A$G$b!“e(B
mathn e$B$NCf$G$J$i!”@55,2=$5$l$Fe(B 4 e$B$K$J$j$^$9$7!”:#8=:_!"e(Bmathn.rb e$B$GDj5Ae(B
e$B$9$kJ,$K$O!"LdBj$O$J$$$N$G$Oe(B?

e$B$"$k0UL#e(B, mathn.rb e$B$O$d$jJ|Bj$J$N$Ge(B,
e$BBg>fIW$@$H;W$$$^$9e(B.

CMathe$B$H$7$F$Oe(B, e$B$I$&$5$l$^$9e(B? e$B$"$k0UL#e(B,
Math::expe$B$+$ie(BCMath::exp e$B$X$N3He(B
e$BD%$HF1$8$+$H;W$$$^$9$,e(B?

__
---------------------------------------------------->> e$B@PDMe(B
e$B7=<ye(B <<—
---------------------------------->> e-mail: [email protected] <<—

e$B$"$k0UL#e(B, mathn.rb e$B$O$d$jJ|Bj$J$N$Ge(B, e$BBg>fIW$@$H;W$$$^$9e(B.

e$B$O$$!#e(B

CMathe$B$H$7$F$Oe(B, e$B$I$&$5$l$^$9e(B? e$B$"$k0UL#e(B, Math::expe$B$+$ie(BCMath::exp e$B$X$N3He(B
e$BD%$HF1$8$+$H;W$$$^$9$,e(B?

e$B$(!<$H!":#$Oe(B lib/complex.rb e$B$rFI$`$H0JA0$HF1MM$K!“e(BMath
e$B$N4X?t$,:FDj5A$5e(B
e$B$l$k$h$&$K$J$C$F$$$^$9e(B (CMath
e$B$G>e=q$-e(B)e$B!#$C$F!”$=$&$$$&;v$8$c$J$$$N$+$J!#e(B
e$B0UL#$,<h$l$F$$$J$$$+$b$7$l$J$$$G$9!#e(B

e$B$=$l0J>e$N3H=<$,I,MW$J$i$P!“e(BComplex e$B$NHOCf$J$ie(B cmath.rb
e$B$r!”$=$&$G$J$$e(B
e$B$J$i$d$O$j!“e(Bmathn.rb
e$B$N$[$&$G$J$s$H$+$9$k!”$H$$$&$3$H$K$J$j$^$9$+!#e(B

e$B$D$$$G$K$$$&$H!"e(Blib/rational.rbe$B!"e(Blib/complex.rb
e$B$O8_49@-$N$?$a$KB8:_$9e(B
e$B$k$N$G!"I,MW$J$ie(B mathn e$B$Ge(B lib/cmath.b
e$B$rFI$s$G>e=q$-$9$Y$-$G$9$M!#$=$Ne(B
e$BJU$3$C$A$GD>$7$F$7$^$C$F$b$h$$$N$G$9$1$I!#e(B

mathn e$B$N2]Bj$O$=$l$O$=$l$H$7$F!“e(B1.9 e$B$G$O$3$N>l9g!”$d$O$je(B
mathn e$B$7$J$/$Fe(B
e$B$bJ#AG?t$rJV$7$?$[$&$,$$$$$N$G$O$J$$$+$H$$$&5$$,$7$F$$$^$9!#e(B

e$B$3$NJQ99$r$7$F$b!"!V0JA0$ONc30$@$C$?$b$N$,$=$&$G$O$J$/$J$C$?!W$H$$$&$he(B
e$B$&$JJQ2=$O$"$j$^$;$s!#e(BNaN e$B$G$O$J$/!"$^$7$JCM$,JV$j$^$9!#e(B1.9
e$B$G$O!“e(B
Complex e$B$,$”$k$N$G!"IT;W5D$G$O$J$$$H;W$$$^$9!#e(B

[ruby-math:00543] e$B$G$b!“0lN’$Ke(B Complex
e$B$rJV$9$3$H$K0[5D$,$”$C$F!“I,MW$Je(B
e$B>l9g$K$O!”$`$7$me(B Complex
e$B$rJV$7$F$[$7$$!"$H$$$&;v$i$7$$$N$G!"$=$NMWK>$Ke(B
e$B1h$&$H;W$$$^$9!#e(B

e$BJ#AG?t$rJV$9>l9g$r$b$C$H9J$C$F$$$$$N$+$b$7$l$^$;$s$,!"$3$s$J$H$3$m$G!#e(B

Index: numeric.c

— numeric.c (revision 19415)
+++ numeric.c (working copy)
@@ -794,6 +794,8 @@
case T_BIGNUM:
return DBL2NUM(pow(RFLOAT_VALUE(x), rb_big2dbl(y)));
case T_FLOAT:

  • if (RFLOAT_VALUE(x) < 0)
  • return rb_funcall(rb_complex_raw1(x), rb_intern(""), 1, y);
    return DBL2NUM(pow(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
    default:
    return rb_num_coerce_bin(x, y, rb_intern("
    "));
    @@ -2484,6 +2486,8 @@
    return DBL2NUM(RFLOAT_VALUE(y) < 0 ? (1.0 / zero) : 0.0);
    }
    if (a == 1) return DBL2NUM(1.0);
  • if (a < 0)
  •  return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
    
    return DBL2NUM(pow((double)a, RFLOAT_VALUE(y)));
    default:
    return rb_num_coerce_bin(x, y, rb_intern("**"));
    Index: bignum.c
    ===================================================================
    — bignum.c (revision 19415)
    +++ bignum.c (working copy)
    @@ -2098,6 +2098,8 @@
    if (y == INT2FIX(0)) return INT2FIX(1);
    switch (TYPE(y)) {
    case T_FLOAT:
  • if (rb_funcall(x, ‘<’, 1, INT2FIX(0)))
  •  return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
    
    d = RFLOAT_VALUE(y);
    break;

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

e$B$+$J$j$.$j$.$j$C$]$$$N$GDq93$N@<$,=P$k$+$b$7$l$^$;$s$,!#e(B

In message “Re: [ruby-dev:36374] Re: mathn (#**)”
on Thu, 18 Sep 2008 21:27:22 +0900, Tadayoshi F.
[email protected] writes:
|mathn e$B$N2]Bj$O$=$l$O$=$l$H$7$F!“e(B1.9 e$B$G$O$3$N>l9g!”$d$O$je(B mathn e$B$7$J$/$Fe(B
|e$B$bJ#AG?t$rJV$7$?$[$&$,$$$$$N$G$O$J$$$+$H$$$&5$$,$7$F$$$^$9!#e(B
|
|e$B$3$NJQ99$r$7$F$b!“!V0JA0$ONc30$@$C$?$b$N$,$=$&$G$O$J$/$J$C$?!W$H$$$&$he(B
|e$B$&$JJQ2=$O$”$j$^$;$s!#e(BNaN e$B$G$O$J$/!"$^$7$JCM$,JV$j$^$9!#e(B1.9 e$B$G$O!“e(B
|Complex e$B$,$”$k$N$G!"IT;W5D$G$O$J$$$H;W$$$^$9!#e(B

e$B;?@.$7$^$9!#e(B

e$BK-J!$G$9!#e(B

e$B:Y$+$$$3$H$G$9$,e(B

— bignum.c (revision 19415)
+++ bignum.c (working copy)
@@ -2098,6 +2098,8 @@
if (y == INT2FIX(0)) return INT2FIX(1);
switch (TYPE(y)) {
case T_FLOAT:

  • if (rb_funcall(x, ‘<’, 1, INT2FIX(0)))
    if (!RBIGNUM_SIGN(x) && !BIGZEROP(x))

e$B$O$I$&$G$9$+!#e(B

    if (!RBIGNUM_SIGN(x) && !BIGZEROP(x))

e$B$O$I$&$G$9$+!#e(B

e$B$*$=$i$/$=$l$G$$$$$s$G$7$g$&$M!#e(Bbignum
e$B$r$m$/$KFI$s$G$J$$$N$G!#B>$K$bF1e(B
e$B$8$h$&$J$H$3$m$,$"$k$N$G!"$=$l$b7kO@$,=P$?$i=$@5$5$l$k$H;W$$$^$9!#e(B

Common Lisp e$B$de(B Scheme e$B$G$be(B (expt -2 2.0)
e$B$,J#AG?t$K$J$k$+$I$&$+$O$^$Ae(B
e$B$^$A$$?$$$G$9$,!"$H$j$"$($:$3$N>l9g$r=|30$7$F$$^$7$?!#e(B

(-2) ** 2.0 #=> 4.0
(-2) ** 2.1 #=> (4.07726854214945+1.32478485617518i)

(-2) ** Rational(2) #=> (4/1)
(-2) ** Rational(‘2.1’) #=> (4.07726854214945+1.32478485617518i)

e$B$"$HK-J!$5$s$N;XE&$b4^$a$F=$@5!#e(B

Index: numeric.c

— numeric.c (revision 19423)
+++ numeric.c (working copy)
@@ -794,7 +794,14 @@
case T_BIGNUM:
return DBL2NUM(pow(RFLOAT_VALUE(x), rb_big2dbl(y)));
case T_FLOAT:

  • return DBL2NUM(pow(RFLOAT_VALUE(x), RFLOAT_VALUE(y)));
  •  {
    
  • double dx = RFLOAT_VALUE(x);
  • double dy = RFLOAT_VALUE(y);
  • if (dx < 0 && dy != round(dy))
  •    return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
    
  • return DBL2NUM(pow(dx, dy));
  •  }
     default:
    
    return rb_num_coerce_bin(x, y, rb_intern("**"));
    }
    @@ -2484,7 +2491,13 @@
    return DBL2NUM(RFLOAT_VALUE(y) < 0 ? (1.0 / zero) : 0.0);
    }
    if (a == 1) return DBL2NUM(1.0);
  • return DBL2NUM(pow((double)a, RFLOAT_VALUE(y)));
  • {

  •  double dy = RFLOAT_VALUE(y);
    
  •  if (a < 0 && dy != round(dy))
    
  • return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);

  •  return DBL2NUM(pow((double)a, dy));
    
  • }
    default:
    return rb_num_coerce_bin(x, y, rb_intern("**"));
    }
    Index: bignum.c
    ===================================================================
    — bignum.c (revision 19423)
    +++ bignum.c (working copy)
    @@ -2099,11 +2099,13 @@
    switch (TYPE(y)) {
    case T_FLOAT:
    d = RFLOAT_VALUE(y);

  • if ((!RBIGNUM_SIGN(x) && !BIGZEROP(x)) && d != round(d))

  •  return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
    

    break;

     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);
    @@ -2113,7 +2115,7 @@
    yy = FIX2LONG(y);

    if (yy < 0)

  • return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
  •  return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
    
    else {
    VALUE z = 0;
    SIGNED_VALUE mask;

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev :36369 ] the message: "[ruby-dev:36369] Re: mathn (#**)
", on Sep/18 19:27(JST) Tadayoshi F. writes:

e$B$"$k0UL#e(B, mathn.rb e$B$O$d$jJ|Bj$J$N$Ge(B, e$BBg>fIW$@$H;W$$$^$9e(B.

e$B$O$$!#e(B

CMathe$B$H$7$F$Oe(B, e$B$I$&$5$l$^$9e(B? e$B$"$k0UL#e(B, Math::expe$B$+$ie(BCMath::exp e$B$X$N3He(B
e$BD%$HF1$8$+$H;W$$$^$9$,e(B?

e$B$(!<$H!":#$Oe(B lib/complex.rb e$B$rFI$`$H0JA0$HF1MM$K!“e(BMath e$B$N4X?t$,:FDj5A$5e(B
e$B$l$k$h$&$K$J$C$F$$$^$9e(B (CMath e$B$G>e=q$-e(B)e$B!#$C$F!”$=$&$$$&;v$8$c$J$$$N$+$J!#e(B
e$B0UL#$,<h$l$F$$$J$$$+$b$7$l$J$$$G$9!#e(B

e$B$9$$$^$;$se(B. e$BJ,$+$j$E$i$$I=8=$Ge(B.

[ruby-dev:36374] e$B$+$i$N%9%l%C%I$GD>@\e(Bnumeric.c
e$B$K%Q%C%A$rEv$F$F$$$^$9e(B
e$B$,e(B, e$B$=$&$G$O$J$/e(B, cmath.rb e$B$G$d$C$F$Oe(B?
e$B$H$$$&$3$H$G$7$?e(B.

e$B0JA0e(B, sqrte$B$N7o$G$b$"$j$^$7$?$,e(B, e$BI8=$N?6$kIq$$$G$Oe(B, sqrt(-1)e$B$GJ#AG?t$re(B e$BJQ$($5$J$$$H$$$&$N$,9g0U;v9$Ge(B, cmath.rb e$B$de(B complex.rb
e$B$re(Brequire e$B$7$?e(B
e$B$H$-$O$=$l$J$j$N?6$kIq$$$r$9$k$H$J$C$F$$$k$H;W$$$^$9e(B.
e$B$=$l$Oe(B, **e$B$G$bF1e(B
e$B$8$3$H$,8@$($k$H;W$$$^$9e(B.

e$B$=$l0J>e$N3H=<$,I,MW$J$i$P!“e(BComplex e$B$NHOCf$J$ie(B cmath.rb e$B$r!”$=$&$G$J$$e(B
e$B$J$i$d$O$j!“e(Bmathn.rb e$B$N$[$&$G$J$s$H$+$9$k!”$H$$$&$3$H$K$J$j$^$9$+!#e(B

e$B$=$&$G$9$Me(B. [ruby-dev:36374] e$BAjEv$N$3$H$re(B cmath.rb
e$B$b$7$/$Oe(B complex.rb
e$B$GBP1~$7$?$i$I$&$G$7$g$&$H8@$&$3$H$G$7$?e(B.

e$B$D$$$G$K$$$&$H!"e(Blib/rational.rbe$B!"e(Blib/complex.rb e$B$O8_49@-$N$?$a$KB8:_$9e(B
e$B$k$N$G!"I,MW$J$ie(B mathn e$B$Ge(B lib/cmath.b e$B$rFI$s$G>e=q$-$9$Y$-$G$9$M!#$=$Ne(B
e$BJU$3$C$A$GD>$7$F$7$^$C$F$b$h$$$N$G$9$1$I!#e(B

e$B$=$&$G$9$Me(B. e$B$*4j$$$7$A$c$C$FNI$$$G$9e(B?

__
---------------------------------------------------->> e$B@PDMe(B
e$B7=<ye(B <<—
---------------------------------->> e-mail: [email protected] <<—

e$BK-J!$G$9!#e(B

— 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 e$B$,@5$N>l9g$O$"$C$5$je(B double
e$B$K$7$F$$$k$N$KIi$N>l9g$OM-M}?te(B
e$B$G4hD%$k$H$$$&$N$OIT8xJ?$J5$$,$7$^$9!#e(B

e$B$H$3$m$Ge(B ruby -e ‘p((-1020)-0.5)’ e$B$Oe(B
(0-1.0e-10i) e$B$G$O$J$/e(B (6.12303176911189e-27-1.0e-10i)
e$B$J$s$G$9$M!#e(B
e$B0lEY6K:BI8$KJQ49$9$k$N$GJP3Q$N8m:9$O$7$g$&$,$J$$$+!#e(B

y e$B$,@5$N>l9g$O$"$C$5$je(B double e$B$K$7$F$$$k$N$KIi$N>l9g$OM-M}?te(B
e$B$G4hD%$k$H$$$&$N$OIT8xJ?$J5$$,$7$^$9!#e(B

e$B$H$$$&$+!"$3$N>l9g$I$A$i$b4hD%$i$J$/$F$$$$$h$&$J!#e(B

e$B$H$3$m$Ge(B ruby -e ‘p((-1020)-0.5)’ e$B$Oe(B
(0-1.0e-10i) e$B$G$O$J$/e(B (6.12303176911189e-27-1.0e-10i)
e$B$J$s$G$9$M!#e(B

e$BB>$N=hM}7O$G$b$@$$$?$$$=$s$J$b$s$_$?$$$G$9!#e(B

[ruby-dev:36374] e$B$+$i$N%9%l%C%I$GD>@\e(Bnumeric.c e$B$K%Q%C%A$rEv$F$F$$$^$9e(B
e$B$,e(B, e$B$=$&$G$O$J$/e(B, cmath.rb e$B$G$d$C$F$Oe(B? e$B$H$$$&$3$H$G$7$?e(B.

e$B$^$:!"e(Bcmath
e$B$O$=$&$$$&=q$-49$($r$9$k$?$a$N$b$N$8$c$J$$$G$9$h$M!#e(B
require ‘cmath’ e$B$7$F!"e(BMath
e$B$,CV$-49$($i$l$k$J$i$P!"6Z$ODL$k$H;W$$$^$9!#e(B

e$B$*$=$i$/!"$=$&$$$&$N$O!“e(Bmathn e$B$N$d$k;v$G!”$3$NOC$bK\6Z$Oe(B
mathn e$B$J$o$1$Ge(B
e$B$9e(B
(e$B>/$72#F;$K$=$l$F$^$9$,e(B)e$B!#$A$g$C$H$7$?ITHw$G!“C1$K0l4S@-$K7g$1$F$k$He(B
e$B$3$m$,$”$k!"$H$$$&$@$1$@$H;W$$$^$9!#e(B

[ruby-dev:36374]
e$B$NDs0F$H%Q%C%A$O!“0l1~J,$1$F9M$($?$$$G$9$,!”$$$E$l$K$7e(B
e$B$F$b!"e(Bmathn e$BE*$J$b$N$rA}$9$N$OH?BP$G$9!#e(B

e$B$1$$$8$e!w$$$7$D$+$G$9e(B.

In [ruby-dev :36395 ] the message: "[ruby-dev:36395] Re: mathn (#**)
", on Sep/19 21:07(JST) Tadayoshi F. writes:

e$B$^$:!"e(Bcmath e$B$O$=$&$$$&=q$-49$($r$9$k$?$a$N$b$N$8$c$J$$$G$9$h$M!#e(B
require ‘cmath’ e$B$7$F!"e(BMath e$B$,CV$-49$($i$l$k$J$i$P!"6Z$ODL$k$H;W$$$^$9!#e(B

e$B$&!<$se(B. e$B$J$k$[$Ie(B,
e$B$=$&$$$&Iw$K9M$($k$N$bJ,$+$k5$$O$7$^$9e(B.

e$B$*$=$i$/!"$=$&$$$&$N$O!“e(Bmathn e$B$N$d$k;v$G!”$3$NOC$bK\6Z$Oe(B mathn e$B$J$o$1$Ge(B
e$B$9e(B (e$B>/$72#F;$K$=$l$F$^$9$,e(B)e$B!#$A$g$C$H$7$?ITHw$G!“C1$K0l4S@-$K7g$1$F$k$He(B
e$B$3$m$,$”$k!"$H$$$&$@$1$@$H;W$$$^$9!#e(B

[ruby-dev:36374] e$B$NDs0F$H%Q%C%A$O!“0l1~J,$1$F9M$($?$$$G$9$,!”$$$E$l$K$7e(B
e$B$F$b!"e(Bmathn e$BE*$J$b$N$rA}$9$N$OH?BP$G$9!#e(B

mathne$BE*$H$$$&$N$A$c$s$HDj5A$9$k$He(B,
e$BI8=`e(B(e$BAH$9~$$@$1$N>uBV$G$Ne(B)e$B4X?te(B,
e$B$^$?$O1i;;;R$NDj5A0h$G$N?6$kIq$$$rJQ99$b$$$H$o$J$$$3$H$@$H$*$b$$$^$9e(B.

ex)
2/4 => Rational(1,2)
sqrt(4) => 2

e$B$G$9$N$Ge(B, e$B85!9$NDj5A0h$G$N?6$kIq$$$rJQ$($:$Ke(B,
e$BDj5A0h30e(B(e$BNc30$NH/@8$9$ke(B
e$BNN0h$Ge(B)e$BJ#AG3HD%$9$k$N$Oe(Bmathne$BE*$H$$$&$G$J$/e(B,
e$B$=$l$Oe(B,
cmath.eb/complex.rb e$B$G9T$C$F$bNI$$$H9M$($F$$$k$N$G$9$,e(B,
e$B$$$+$,$G$9e(B?

ex)
sqrt(-2) => Complex(0, 1.414i)

e$B$=$N$h$&$K9M$($k$He(B,

(-8) ** (1.0/3) => NaN

e$B$,e(B
cmath.rbe$B$b$7$/$Oe(Bcomplex.rbe$B$re(Brequiree$B$9$k$3$H$K$h$C$Fe(B,

(-8) ** (1.0/3) #=> Complex(1, 1.732050808)

e$B$H$J$C$F$be(B, e$B85!9$NDj5A0h$G$N?6$kIq$$$,F1$8$G$"$l$Pe(B,
e$B0cOB46$O$J$$$N$G$9e(B
e$B$,e(B?

__
---------------------------------------------------->> e$B@PDMe(B
e$B7=<ye(B <<—
---------------------------------->> e-mail: [email protected] <<—

e$B$G$9$N$Ge(B, e$B85!9$NDj5A0h$G$N?6$kIq$$$rJQ$($:$Ke(B, e$BDj5A0h30e(B(e$BNc30$NH/@8$9$ke(B
e$BNN0h$Ge(B)e$BJ#AG3HD%$9$k$N$Oe(Bmathne$BE*$H$$$&$G$J$/e(B, e$B$=$l$Oe(B,
cmath.eb/complex.rb e$B$G9T$C$F$bNI$$$H9M$($F$$$k$N$G$9$,e(B, e$B$$$+$,$G$9e(B?

e$B4pK\E*$K!“e(Bcmath.rb e$B$O!“e(BCMath
e$B%b%8%e!<%k$rDs6!$9$k$b$N!”$H$7$+9M$($F$$$Je(B
e$B$$$G$9$M!#:#8=:_e(B cmath.rb e$B$,$”$k$N$O!"e(B

o e$B$^$D$b$H$5$s$,!"e(BMath e$B$H$NE}9g$rK>$^$J$+$C$?e(B
o e$B$G!"e(Blib/cmath.rb e$B$G$$$$$8$c$s!"8@$o$l$?e(B

e$B$H$$$&$@$1$N;v$G!“KM$H$7$F$OEv=i$Oe(B Math
e$B$NDj5A$rJQ$($k!”$=$&$G$J$/$F$be(B
e$BAH$9~$%b%8%e!<%k$K$9$k!"$H$$$&$3$H$r9M$($F$$$^$7$?!#e(Bcmath.rb
e$B$O!"$=$&e(B
e$B$$$&7A$G30It$K=P$?$@$1$J$s$G!"$=$l0J>e$N0UL#$O$J$$$H9M$($F$$$^$9!#$d$Ce(B
e$B$Q$jAH$9~$$K$7$h$&!"$H$J$l$P!"$=$N;~E@$G>C$($kB8:_$G$9!#$=$l0J>e$N0Ue(B
e$BL#$rIU2C$9$k$He(B cmath e$B$N0U5A$,%V%l$F$/$k$H;W$$$^$9!#e(B

e$B$H$J$C$F$be(B, e$B85!9$NDj5A0h$G$N?6$kIq$$$,F1$8$G$"$l$Pe(B, e$B0cOB46$O$J$$$N$G$9e(B
e$B$,e(B?

e$B$@$+$i$3$=!"e(Bcmath
e$B$H$$$&7A$G30$KDI$$=P$90UL#$,$o$+$i$J$$$C$F$H$3$m$b$"e(B
e$B$j$^$9$M!#$=$&$J$C$F$$$F$b$$$$$N$+$b$7$l$J$+$C$?$G$9$,!“L>A0$,e(B
cmath e$B$Ge(B
e$B$O$A$g$C$HL5M}$,$”$k$h$&$J!#e(B

e$B$=$l$G!"@h<h$j$7$Fe(B ruby e$BK\BN$KF~$l$k$+!“e(B2.0
e$B$^$GBT$D$+!”$@$H;W$C$F$$$^e(B
e$B$7$?$,!"$b$&8=;~E@$G$OCY$$$N$G8e<T$C$F$3$H$G!#e(B