Rational.rb, complex.rb and mathn.rb

e$B$7$^$9!#e(B** e$B$de(B sqrt e$B$N:FDj5A$O!"0U5A$@$15b$_<h$C$F<N$F$^$9!#e(B

e$B$H$$$&$N$Oe(B, rubye$BK\BN$Ge(B mathne$B$GDj5A$7$F$$$k$h$&$J$b$N$rDs6!$7$h$C$F$3$He(B
e$B$@$C$?$N$G$9e(B? e$B$=$l$J$ie(B, e$BA4A30U5A$O$J$$$G$9e(B.

e$B$=$&$$$&$3$H$G$9!#e(B

e$B$?$@e(B, e$B86$5$s$b$*$C$7$c$C$F$$$k$h$&$Ke(B, e$B$$$^$Ne(BMathne$B$Ne(B**e$B$rAH$9~$$K$9$ke(B
e$B$N$OL5M}$,$"$k$h$&$J5$$b$7$J$$$G$b$J$$$G$9$,e(B.

e$B$=$l$G0U5A!"$H$$$&$3$H$J$s$G$9$,!"@PDM$5$s$+$i8+$l$P!“BgI}$J=L>.$H$$$&e(B
e$B$3$H$K$J$k$+$b$7$l$^$;$s$,!“e(Brational e$B$He(B complex
e$B$rB+$M$F!“7g$1$F$$$k$be(B
e$B$N$rJd$&!”$H$$$&ItJ,$r:#8e$be(B mathn
e$B$KMj$k$o$1$K$O$$$+$J$$$@$m$&$H;W$$$^e(B
e$B$9!#6qBNE*$K$O!”:#OC$7$F$$$k:GCf$G$”$ke(B (-8) ** Rational(1,3)
e$B$r$I$&$9$ke(B
e$B$+!"$H$$$&$"$?$j$J$I$G$9$M!#e(B

mathn
e$B$J$j$K:#8e$b4hD%$k$H$3$m$,$"$l$P!"$=$l$O$=$l$G$$$$$N$+$b$7$l$^$;e(B
e$B$s!#$H$O$$$&$b$N$N!“KM$K$O!”:#$N$H$3$m$h$/$o$+$j$^$;$s$,!#e(B

e$B<2C+$G$9!#e(B

-------- Original Message --------
Subject: [ruby-dev:34143] Re: rational.rb, complex.rb and mathn.rb
From: Shin-ichiro HARA [email protected]
To: ruby developers list [email protected]
Date: Wed Mar 26 2008 19:22:56 GMT+0900

e$B=q$-$J$,$iI=8=$,0-$$$J$H;W$C$F$$$^$7$?!“$9$$$^$;$s!#e(B
e$B@53N$K$O!”!V$3$NDj5A$G$O!“e(B3e$B>h:,$r<h$k$3$H$,!”<B?t$+$i<B?t$X$Ne(B
e$B4X?te(B y = x**3 e$B$N5U4X?t$G$O$J$/$J$k!W$H8@$&$Y$-$G$7$?!#e(B

e$B4X?t$r$I$&Dj5A$9$k$+$H$$$&$3$H$K$J$j$^$9!#e(B
e$B%7%s%W%k$JDj5A$r$9$k$J$i!"0J2<$Ne(B a), b) e$B$,9M$($i$l$^$9!#e(B

a) e$B<B?te(B → e$B<B?t$r$"$i$o$9$b$N$H$9$k$J$i!“e(Bx >= 0
e$B$N$_Dj5A$5$l$ke(B
b) e$BJ#AG?te(B → e$BJ#AG?t$r$”$i$o$9$b$N$H$9$k$J$i!"e(Bx
e$B$OA4NN0h$GDj5A$5$l$ke(B

a) e$B$N>l9g!"e(B(-2) ** 3 e$B$ODj5A$5$l$F$$$J$$$O$:$G$9!#e(B

e$B$=$3$Ge(B Python e$B$J$I$G$O!"e(B
a’) y e$B$,@0?t$N>l9g$O!"e(Bx e$B$OA4NN0h$GDj5A$5$l$ke(B

e$B$H$$$&Dj5A$rDI2C$7$F$$$^$9!#e(B
e$B$H$$$&$3$H$O!"F1$8$h$&$Ke(B (-8) ** (1/3) e$B$rDj5A$9$k$?$a$K$O!"e(B

a") y e$B$,e(B Rational e$B$G!"J,Jl$,4q?t$N>l9g$N$_!"e(Bx
e$B$OA4NN0h$GDj5A$5$l$ke(B

e$B$H$$$&Dj5A$rDI2C$9$k$3$H$K$J$k$G$7$g$&!#e(B
e$B$3$N>l9g!"e(B(-8) ** (1/3) e$B$Oe(B -2 e$B$,JV$k$3$H$K$J$j$^$9!#e(B

b) e$B$J$iFC$KJ#;($J$3$H$r$;$:!"e(B(-8) ** (1/3) e$B$Oe(B 1 + e$B"ee(B3i
e$B$,JV$j$^$9e(B
(e$BEDCf>;9($5$s$N7W;;J}K!$,IaDL$G$7$g$&$+$ie(B)

e$B$$$:$l$N>l9g$b!"e(Bx = 0, Re(y) < 0 e$B$J$iL$Dj5A$G$9e(B

e$B$J$<<B?t2r$h$j$b5u?t2r$,M%@h$5$l$k$N$+$O5?Ld$G$9$,!#e(B

e$B$3$3$,;d$b5$$K$J$C$F$$$?$N$G$9$,!"<2C+$5$s$N8@$&DL$j$G!"e(B
e$B$3$l$O!“e(Bz**(1/3) e$B$Ge(B z e$B$,@5$N<B?t$G$”$k>l9g$H@09gE*$K$9$ke(B
e$B$?$a$N0l$D$NJXK!$G$9!#e(B

e$BJXK!$H$$$&$+!"J#AG?t$re(B
z = r * exp(itheta) (r>=0, 0<=theta<2pi)
e$B$H=q$$$F!“e(B
z**(1/3) = r**(1/3) * exp(i*theta/3)
e$B$rJV$7$F$$$k$N$@$H$9$l$P!”<+A3$KM}2r$G$-$k$H;W$$$^$9!#e(B
e$B5U4X?t$@$H;W$o$J$1$l$P$h$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$BEDCf>;9(e(B

e$B86$G$9!#e(B

e$B<0!"%a%=%C%I7A<0!“1i;;;R4V$G0c$$$,$”$C$F!"$5$i$Ke(B mathn e$B$b$"$C$F!"$"$A$3e(B
e$B$AJ,CG$5$l$F$$$k$h$&$K46$8$^$9!#e(B

e$B!VF1$8?tCM$re(B Rational e$B$G$be(B Complex
e$B$G$bI=8=$G$-!W$H$$$&$H$3$m$K$U$J$P$5e(B
e$B$s$N9M$($,$h$/$"$i$o$l$F$$$k$H;W$$$^$9!#BPHf$7$F6KC<$K8@$&$H!Ve(BRational
e$B$de(B Complex
e$B$K0c$&?t$,$"$C$F!"Aj8_$KJQ49$,$G$-$?$j$G$-$J$+$C$?$j$9$k!#$=e(B
e$B$l$G$$$$!#!W$H$$$&$N$,;d$N463P$+$J!#OC$,$U$j$@$7$KLa$j$=$&$@$1$I!#e(B

e$B$7$+$7!“e(BComplex e$B$O$d$C$+$$$G$9!#$@$C$F!”$=$b$=$be(B Real
e$B$,:n$l$J$$$N$Ke(B
Complex e$B$,:n$l$k$J$s$FJQ$G$9$h$M!#8=:_$Ne(B Complex
e$B$O!"$A$g$C$H%3%s%F%J7?e(B
e$B$H$$$&$+!"e(BFloat [email protected],$Ne(B Complex e$B$@$C$?$j!"e(BInteger
[email protected],$Ne(B Complex e$B$H$+$9e(B
e$B$k$o$1$G!"C1=c$J$b$N$H$O8@$$Fq$$$G$9$M!#$7$+$?$,$J$$$N$G$9$,!#e(B

e$B$G!"8=>l$KLa$k$H!De(B

e$B$3$N0F$r:NMQ$7$?$H$7$F!"e(B

Math.sqrt(Rational(1,4)) #=> Rational(1, 2)
Math.sqrt(4) #=> 2

e$B$N$h$&$J$3$H$r$7$?$$>l9g!"$I$&$$$&BP1~$K$J$k$s$G$7$g$&$M!#e(B

e$B;d$O!"e(BMath.sqrt e$B$NLa$jCM$Oe(B Float
e$B8GDj$H9M$($F$$$^$9!#$=$$$&87L)?t$rJV$9e(B
e$B4X?t$Oe(B isqrt e$B$H$+$$$&L>A0$GJL$KMQ0U$9$k$o$1$G$9!#e(Bruby-math
e$B$G<BAu$K$D$$e(B
e$B$F$@$$$V5DO@$7$?$1$I!"7k6IK\BN$K<h$j9~$`$K;j$j$^$;$s$G$7$?!#;d$,%X%?%le(B
e$B$N$;$$$+$b!#e(B

e$B86$G$9!#e(B

e$B:#2s!"e(Bmathn.rb e$B$Ge(B aRational**aRational e$B$,e(B Rational e$B$GI=8=$G$-$k$H$-$O!"e(B
Rational e$B$rJV$9$h$&$K6E$C$?:n$j$K$J$C$F$k$N$K5$IU$-$^$7$?!#$$$^$5$i!#e(B
e$B$9$P$i$7$$!#e(B

e$B$?$@!"@PDM$5$s$OAG0x?tJ,2r$r;H$C$F$$$k$1$I!"$b$&$A$g$C$HB.$$J}K!$,$"$ke(B
e$B$+$b$7$l$^$;$s$M!#e(B1/2 e$B>h$@$H!"@0?t$N9bB.$KJ?J}:,$r5a$a$kJ}K!$,!"e(B
ruby/math e$B$N$I$3$+$Ge(B isqrt e$B$H$+$$$&L>A0$GDs0F$5$l$F$$$?$7!"F1MM$K@0?t$Ne(B
1/n e$B>h$b%K%e!<%H%sK!$r;H$C$FB.$/5a$a$k$3$H$,$G$-$k$H;W$$$^$9!#e(B

e$B$_$D$1$^$7$?!#e(B[ruby-math:00914] New methods of Integer
e$B$+$i1d!9$HB3$/%9e(B
e$B%l%C%I$G5DO@$5$l$F$$$^$7$?!#$+$J$jKDBg$JFbMF$G!";~4V$,L5$$$H$HFI$_JV$;e(B
e$B$^$;$s!#@0?t$Ne(B k
e$B>h:,$K$D$$$F$O!"@5LZ$5$s$,!":F5"$K$h$kJ}K!$de(B Newton e$BK!e(B
e$B$K$h$kJ}K!$r=q$$$F$$$^$9!#:F5"$K$h$k$b$Ne(B([ruby-math:00936]
e$B$Ne(B irootB)e$B$re(B
e$B$A$g$C$HJQ$($F$3$3$K=q$/$H!'e(B

def iroot(k, n)
return 0 if n <= 0
r0 = 2 * iroot(k, n >> k)
r1 = r0 + 1
n < r1 ** k ? r0 : r1
end

e$B$G$9!#@0?te(B n e$B$Ne(B k
e$B>h:,e(B(e$B$Ne(Bfloor)e$B$,5a$^$j$^$9!#e(BNewton
e$BK!$@$H$b$C$HB.$$$_e(B
e$B$?$$$@$1$I!"Fq$7$9$.!#$3$l$rMxMQ$9$l$P!"e(B** e$B$N$?$a$Ne(B Prime
e$B$Oe(B mathn.rb
e$B$G$OITMW$K$J$k$N$G$O$J$$$G$7$g$&$+!#e(B

Prime e$B$Oe(B Prime
e$B$G$H$F$bLLGr$$$N$G!"$=$&$$$&?t3XE*$J$b$N$r=8$a$??7$?$J%ie(B
e$B%$%V%i%j$r5/$3$7$?$i$I$&$+$J!#e(B

Math.sqrt(Rational(1,4)) #=> Rational(1, 2)
Math.sqrt(4) #=> 2

e$B$N$h$&$J$3$H$r$7$?$$>l9g!"$I$&$$$&BP1~$K$J$k$s$G$7$g$&$M!#e(B

e$B;d$O!"e(BMath.sqrt e$B$NLa$jCM$Oe(B Float e$B8GDj$H9M$($F$$$^$9!#$=$$$&87L)?t$rJV$9e(B
e$B4X?t$Oe(B isqrt e$B$H$+$$$&L>A0$GJL$KMQ0U$9$k$o$1$G$9!#e(Bruby-math e$B$G<BAu$K$D$$e(B

isqrt e$B$H$$$&$N$O!"e(B

Math.isqrt(5) #=> 2
e$B$H$+e(B
Math.isqrt(5) #=> [2, 1]

e$B$N$h$&$K$J$k$s$G$7$g$&$+!#e(B

e$B86$G$9!#e(B

Tadayoshi F. e$B$5$s$O=q$-$^$7$?e(B:

e$B;d$O!"e(BMath.sqrt e$B$NLa$jCM$Oe(B Float e$B8GDj$H9M$($F$$$^$9!#$=$$$&87L)?t$rJV$9e(B
e$B4X?t$Oe(B isqrt e$B$H$+$$$&L>A0$GJL$KMQ0U$9$k$o$1$G$9!#e(Bruby-math e$B$G<BAu$K$D$$e(B

isqrt e$B$H$$$&$N$O!"e(B

Math.isqrt(5) #=> 2
e$B$H$+e(B
Math.isqrt(5) #=> [2, 1]

e$B$N$h$&$K$J$k$s$G$7$g$&$+!#e(B

e$BA0<T$G$9!#$J$<$=$s$J$KB.$$@0?t$NJ?J}:,$K$3$@$o$C$F$$$?$+$H$$$&$H!"e(B
e$BAG?tH=Dj$J$I$K;H$$$?$+$C$?$+$i$@$H;W$$$^$9!#e(B

e$BA0<T$G$9!#$J$<$=$s$J$KB.$$@0?t$NJ?J}:,$K$3$@$o$C$F$$$?$+$H$$$&$H!"e(B
e$BAG?tH=Dj$J$I$K;H$$$?$+$C$?$+$i$@$H;W$$$^$9!#e(B

isqrt e$B$O$"$C$F$b$$$$$H;W$$$^$9$,!“0lHLE*$Je(B sqrt
e$B$H$7$F$N2DG=@-$,@)8B$5e(B
e$B$l$k$N$,5$$K$J$j$^$9!#e(Bisqrt e$B$,$”$k$+$i!“e(Bsqrt
e$B$OIbF0>.?tE@?t$@$1$”$D$+$(e(B
e$B$P$$$$!"$H$$$&$3$H$G$$$$$s$G$7$g$&$+!#$h$j0lHLE*$J!“e(Bsqrt
e$B$G!”@0?t$dM-M}e(B
e$B?t$,JV$k$3$H$H!"e(Bisqrt e$B$,$=$&$J$k$N$O0UL#$,0c$$$^$9$h$M!#e(B

e$B$7$+$b!"e(Brequire ‘complex’
e$B$7$?$iJQ$C$F$7$^$&$H$$$&$N$O!"KX$I7zA0$H$7$Fe(B
e$B$$$C$F$$$k$K2a$.$J$$$G$9$M!#e(B

e$B2>Na8_49@-$N$?$a$K$;$h!“e(Bsqrt
e$B$O!”%%V%8%’%/%H;X8~$G$b$J$$!"Am>NE$G$b$Je(B
e$B$$!"$b$N$9$4$/8e$m8~$-$K46$8$^$9$M!#$J$s$H$+$J$i$J$$$s$G$7$g$&$+!#e(B

e$B0J2<$N$h$&$K$7$h$&$H;W$$$^$9!#e(B

gcd e$B$J$I$O!"$9$G$KAH$9~$$^$7$?!#e(B

lib/rational.rb
e$B$O8=:_;D3<$,;D$C$F$k$@$1$G$9$,!"4pK\E*$K$3$N$^$^$G$9!#e(B

lib/complex.rb e$B$K$"$C$?!“J#AG?tBP1~e(B Math e$B4X?t$O!“e(BCMath
e$B$+e(B
Complex::Math
e$B$K0$7$^$9!#AH$9~$$G$J$/!“E:IU%i%$%V%i%j$G$$$$$N$+!”$He(B
e$B$$$&$3$H$b$”$j$^$9$,!”$H$/$K0U8+$,$J$1$l$P!"$^$:$O!"0lI<F~$C$F$ke(B
lib/cmath.rb (CMath) e$B$K0\F0$9$k$3$H$K$7$^$9!#e(B

lib/complex.rb e$B$G$O!"8_49@-$N$?$a$K!“e(BMath
e$B$NCV$-49$($rDs6!$9$k$+$b$7$le(B
e$B$^$;$s!#$?$V$s0[5D$,$J$1$l$Pe(B (e$B>/$J$/$H$bEvLL$Oe(B)
e$B$=$&$$$&$3$H$K$7$F$*$-e(B
e$B$^$9!#$3$l$O!“e(Bmathn
e$B$,$=$l$r4|BT$7$F$$$k$H$3$m$,$”$m$&!”$H$$$&$3$H$b$"e(B
e$B$j$^$9!#$$$E$l$K$7$F$b!"e(Blib/complex.rb
e$B$H$$$&%U%!%$%k$O$=$N$^$^;D$j$^e(B
e$B$9!#e(B

lib/mathn.rb e$B$O@PDM$5$s$,4hD%$k!"$H$$$&$3$H$K$J$C$F$$$^$9!#e(B