Rational, complex and mathn

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

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

Rational() e$B$He(B Rational.new e$B$N0c$$$O!"e(BRational() e$B$OJQ494o$G!"e(B
Rational.new e$B$O4pACE*$J%3%s%9%H%i%/%?$H$$$&$3$H$@$H;W$$$^$9!#86$5$s$Ne(B
rational e$B$+$i$b$=$&$$$&0u>]$r<u$1$k$N$G!"4pK\E*$K9M$($F$$$k$3$H$OF1$8e(B
e$B$@$H;W$&$N$G$9$,!#e(B

e$BF1$8$G$9!#e(B

Rational e$B$rFbIt$G;H$&%i%$%V%i%j$G!“e(Bmathn.rb e$B$re(B include e$B$9$k$H!“Ez$($Oe(B
e$B@5$7$$$,!”=hM}B.EY$,$+$J$jCY$/$J$k$b$N$,$”$j$^$9!#$=$3$3$G!"e(BUnify e$B$N1Fe(B
e$B6A$r<u$1$J$$M-M}?t$N@8@.$,M_$7$$$H;W$C$?$N$G$9!#e(B

e$B$7$+$7!“e(Bmathn e$B$9$k$HL5BL$JM-M}?t$rGS=|$9$k$3$H$K$J$k$N$G!”$"$k>lLL$G$Oe(B
e$BM-Mx$K$J$j$^$9$h$M!#AH$$3$$K$7$F!"?tCM7O$H$7$F$NO"7H$r6/2=$7!"%j%F%ie(B
e$B%k$rMQ0U$7$?$i!"$@$$$V0c$C$F$/$k$H;W$$$^$9!#e(B

e$B$J$k$[$I!#$+$($C$FAa$/$J$k$3$H$b$"$k$+!D!#$A$g$C$H<B83$7$F$_$^$9!#e(B

e$B$7$+$7!"e(BRational.new(1, 1) e$B$N7k2L$,e(B Rational e$B$G$J$/$F!“e(BInteger e$B$K$J$ke(B
e$B$N$O5$;}$A0-$$5$$,$7$^$;$s!)e(Bnew e$B$Oe(B private e$B$N$^$^$,$$$$$+$J$”!#e(B

e$B$=$N463P$O$o$+$j$^$9$,!"$?$H$($P!"e(BCommon lisp e$B$G$O!"e(B1/1 e$B$O%j%F%i%k$G$9e(B
e$B$,!"e(B1 e$B$K$J$j$^$9!#J#AG?t$Ne(B #c(1 0) e$B$be(B 1 e$B$K$J$j$^$9!#e(Bnew e$B$K8GM-$N2]Bj$Ge(B
e$B$O$J$/!“e(BRational() e$B$de(B Rational.convert e$B$b!VJQ49!W$7$J$$$H$$$1$J$$$o$1e(B
e$B$G$9$+$i!“e(BInteger e$B$,JV$k$N$OJQ$G$”$k!”$H$$$($k$+$b$7$l$^$;$s!#e(B

Rational() e$B$O!VM-M}?t2=!W$J$N$G$$$$$s$G$9!#@0?t$OM-M}?t$@$+$i!#e(B
Rational.new e$B$Ne(B Rational e$B$O%/%i%9$@$+$i!“e(BInteger
e$B$rJV$5$l$k$H0cOB46$”$ke(B
e$B$s$G$9$h!#e(B

e$B$G$b!“B.$5$r5$$K$9$k%/%j%F%#%+%k$J%W%m%0%i%`$@$C$?$i$=$b$=$be(B mathn
e$B$r%$e(B
e$B%s%/%k!<%I$9$k$J!”$H$$$&$3$H$G$$$$$+$J!#e(B

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

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

e$B$b$&$"$^$j<j$rF~$l$J$$$G$*$3$&$H;W$C$?$N$G$9!"$D$$<j$rF~$l$F$7$^$$$^$7e(B
e$B$?!#e(B

e$B$b$&:n6H$r;O$a$i$l$?$H;W$$$^$9$7!";29M$K$b$J$i$J$$$G$7$g$&$,!“0l1~$”$?e(B
e$B$i$7$$$N$r=P$7$F$*$-$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B0.0.4 e$B$r85$K$7$^$9!#e(B

e$B<!$N$h$&$J>.$5$J?t$KBP$9$k@Q$N%Y%s%A%^!<%/$G$O!"e(Brational-1.19
e$B$NJ}$,e(B4e$BG\e(B
e$B$0$i$$B.$$$_$?$$!#2?$,860x$+$3$l$+$i8&5f$7$^$9!#e(B

-------^ bench.rb
require “rational.rb”

$libname = ARGV.shift || “(unknown)”

def sa(name, from, to, size)
fname = sprintf(“INT%s_%d_%d_%d”, name, from, to, size)
unless File.exist?(fname)
a = (1…size).map{Rational(rand(to - from + 1) + from)}
open(fname, “w”) {|f| f << a.join("\n")}
end
File.read(fname).split.map{|x| x.to_i}
end

def bm(name, routine = nil, n = 1)
start = Time.now
n.times do
yield
end
stop = Time.now
printf("= %-20s %-20s %f sec.\n", name, “(#{$libname})”,
stop - start)
end

def prod1
n = 10**4
a = sa(‘a’, 1, 100, n).zip(sa(‘b’, 1, 100, n)).map{|x, y| Rational(x,
y)}

bm(“product-small”, $libname) do
s = Rational(1)
a.each do |x|
s *= x
end
end
end

prod1
-------$ bench.rb

$ ruby -I…/rationa-1.19 bench.rb rational-1.19 >> benchmark.log
$ ruby -I…/nurat-0.0.4/lib:…/nurat-0.0.3/ext bench.rb nurat-0.0.4 >>
benchmark.log

e$B:G?7$N$b$N$O!"$"$k<o$N7W;;$G$O!“86$5$s$Ne(B rational 1.19 e$B$h$j$bB.$$$h$&e(B
e$B$G$9!#?tCM$,Bg$-$/$J$k$HM-Mx$_$?$$$G$9!#KM<+?H$K$h$k!”$$$/$D$+$N<B:]E*e(B
e$B$J1~MQNc$G$O!"$d$O$j86$5$s$N$[$&$,>/$7B.$$$G$9!#e(B

e$BBg$-$$?t$KBP$7$FCY$$$N$O$J$<$+$J$"!#%k!<%A%s$r%9%$%C%A$9$k$+$i$+$J!#e(B

e$B<!$N$h$&$J>.$5$J?t$KBP$9$k@Q$N%Y%s%A%^!<%/$G$O!"e(Brational-1.19 e$B$NJ}$,e(B4e$BG\e(B
e$B$0$i$$B.$$$_$?$$!#2?$,860x$+$3$l$+$i8&5f$7$^$9!#e(B

e$B$=$l$O86$5$s$,4hD%$C$F:GE,2=$7$F$$$k$+$i$G$7$g$&!#>/$7$E$D@0M}$5$l$F$-e(B
e$B$F$$$^$9$,!"KM$N$OKX$I$J$K$b$7$F$$$J$$$KEy$7$$$G$9$+$i!#$&$A$@$He(B4e$BG$Ie(B
e$B$3$m$8$c$J$$$G$9$M!#e(B

$ ruby -I…/rationa-1.19 bench.rb rational-1.19 >> benchmark.log
$ ruby -I…/nurat-0.0.4/lib:…/nurat-0.0.3/ext bench.rb nurat-0.0.4 >>
benchmark.log

e$B$3$l$@$He(B 0.0.3
e$B$r$D$+$C$F$7$^$$$=$&$G$9$,!#$^!"$"$^$jJQ$j$J$$$+$b$7$le(B
e$B$^$;$s$,!#e(B

e$B86$5$s$N$O$+$1;;$,05E]E*$KB.$$$G$9$M!#$?$@!“2C8:;;$J$I$K$J$k$H$”$^$j0ce(B
e$B$$$,$J$/$J$C$F$-$F!"FC$K?t$,Bg$-$/$J$k$H!"e(Bnurat
e$B$N$[$&$,B.$/$J$C$?$j$9e(B
e$B$k$h$&$G$9!#$$$$$H$3$m$r$&$^$/<h$j$3$a$k$H$$$$$G$9$,!#e(B

— hara-bench.rb Tue Feb 19 06:49:34 2008
+++ hara-bench-n.rb Tue Feb 19 06:59:31 2008
@@ -28,7 +28,7 @@
bm(“product-small”, $libname) do
s = Rational(1)
a.each do |x|

  •  s *= x
    
  •  s += x
    
    end
    end
    end
    — hara-bench.rb Tue Feb 19 06:49:34 2008
    +++ hara-bench-n2.rb Tue Feb 19 07:00:08 2008
    @@ -22,13 +22,13 @@
    end

def prod1

  • n = 10**4
  • a = sa(‘a’, 1, 100, n).zip(sa(‘b’, 1, 100, n)).map{|x, y| Rational(x,
    y)}
  • n = 10**2

  • a = sa(‘a’, 1030, 1040, n).zip(sa(‘b’, 1030, 1040,
    n)).map{|x, y| Rational(x, y)}

    bm(“product-small”, $libname) do
    s = Rational(1)
    a.each do |x|

  •  s *= x
    
  •  s += x
    
    end
    end
    end
    — hara-bench.rb Tue Feb 19 06:49:34 2008
    +++ hara-bench-n3.rb Tue Feb 19 07:01:04 2008
    @@ -22,13 +22,13 @@
    end

def prod1

  • n = 10**4
  • n = 10**5
    a = sa(‘a’, 1, 100, n).zip(sa(‘b’, 1, 100, n)).map{|x, y| Rational(x,
    y)}

    bm(“product-small”, $libname) do

  • s = Rational(1)
  • s = Rational(2)
    a.each do |x|
  •  s *= x
    
  •  s **= x
    
    end
    end
    end

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

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

$ ruby -I…/nurat-0.0.4/lib:…/nurat-0.0.3/ext bench.rb nurat-0.0.4 >>
benchmark.log

e$B$3$l$@$He(B 0.0.3 e$B$r$D$+$C$F$7$^$$$=$&$G$9$,!#$^!"$"$^$jJQ$j$J$$$+$b$7$le(B
e$B$^$;$s$,!#e(B

e$B$"!"<:GT!#e(B

e$B86$5$s$N$O$+$1;;$,05E]E*$KB.$$$G$9$M!#$?$@!“2C8:;;$J$I$K$J$k$H$”$^$j0ce(B
e$B$$$,$J$/$J$C$F$-$F!"FC$K?t$,Bg$-$/$J$k$H!"e(Bnurat e$B$N$[$&$,B.$/$J$C$?$j$9e(B
e$B$k$h$&$G$9!#$$$$$H$3$m$r$&$^$/<h$j$3$a$k$H$$$$$G$9$,!#e(B

— hara-bench.rb Tue Feb 19 06:49:34 2008
+++ hara-bench-n.rb Tue Feb 19 06:59:31 2008

— hara-bench.rb Tue Feb 19 06:49:34 2008
+++ hara-bench-n2.rb Tue Feb 19 07:00:08 2008

e$B3N$+$K2C;;$Ne(B rational-1.19 e$B$O$$$^$$$A$@$J$"!#e(B

bm(“product-small”, $libname) do

  • s = Rational(1)
  • s = Rational(2)
    a.each do |x|
  •  s *= x
    
  •  s **= x
    
    end
    end
    end

e$B$3$l$O!"3]$1;;$G$O$J$/e(B **(aRational) e$B$NLdBj$_$?$$!#e(Bnurat
e$B$G$O!"e(B

N = Float::MAX.to_i * 2
p Rational(N + 2, N + 1).to_f

e$B$H$9$k$He(B NaN e$B$G$9$,!"e(Brational-1.19
e$B$G$OJ#;($J$3$H$r$7$F$$$F!“e(B1.0 e$B$K$Je(B
e$B$j$^$9!#$7$+$7!“9)IW$NM>CO$,$”$k$H$$$&$3$H$@$J$”!#e(B

-----^ bm.rb
#!/usr/bin/ruby
require “rational.rb”

$libname = ARGV.shift || “(unknown)”

def sa(name, from, to, size)
fname = sprintf(“INT%s_%d_%d_%d”, name, from, to, size)
unless File.exist?(fname)
a = (1…size).map{Rational(rand(to - from + 1) + from)}
open(fname, “w”) {|f| f << a.join("\n")}
end
File.read(fname).split.map{|x| x.to_i}
end

def bm(name, routine = nil, n = 1)
start = Time.now
n.times do
yield
end
stop = Time.now
printf("= %-20s %-20s %f sec.\n", name, “(#{$libname})”, stop -
start)#-
end

def rats(a, b, n)
sa((a+[n])).zip(sa((b+[n]))).map{|x, y| Rational(x, y)}
end

def plus0(title, x, y, n)
a = rats([‘a’, *x], [‘b’, *y], n)
bm(title, $libname) do
s = Rational(0)
a.each do |x|
s += x
end
end
end

def mul0(title, x, y, n)
a = rats([‘a’, *x], [‘b’, *y], n)
bm(title, $libname) do
s = Rational(1)
a.each do |x|
s *= x
end
end
end

def rat_pow0(title, x, y, n)
a = rats([‘a’, *x], [‘b’, *y], n)
bm(title, $libname) do
s = Rational(2)
a.each do |x|
s **= x
end
end
end

if $0 == FILE
plus0(“addtion-small”, [-100, 100], [1, 100], 103)
mul0(“product-small”, [1, 100], [1, 100], 10
3)
plus0(“addition-big”, [1030, 1040], [1030, 1040], 50)
mul0(“product-big”, [1030, 1040], [1030, 1040], 50)
rat_pow0(“exponential-rat-big”, [1, 100], [1, 100], 10**5)
end
-----$ bm.rb

Rational() e$B$O!VM-M}?t2=!W$J$N$G$$$$$s$G$9!#@0?t$OM-M}?t$@$+$i!#e(B
Rational.new e$B$Ne(B Rational e$B$O%/%i%9$@$+$i!“e(BInteger e$B$rJV$5$l$k$H0cOB46$”$ke(B
e$B$s$G$9$h!#e(B

e$B$J$k$[$I!#e(B

e$B9=J8E*$JB&LL$,Bg$-$/$F!"%j%F%i%k$,$"$l$PBgJ,0c$$$^$9$,!"$=$l$H$be(B
1/1
e$B$de(B 1+0i e$B$,@0?t$G$"$k$N$b5$;}$o$k$$$G$9$+!#e(B1.0
e$B$OIbF0>.?tE@?t2=$G$b$J$$e(B
e$B$7!"e(B1/1 e$B$OM-M}2=$G$O$J$$$G$9$h$M!#e(B

Complex e$B$G!“e(BComplex.polar e$B$HBP$K$J$k$b$N$,e(B Complex()
e$B$@$H$$$&$N$bJQ$Je(B
e$B$N$G!“e(BComplex.rect
e$B$H$+$”$C$F$b$$$$$H;W$&$s$G$9$,!”$3$N>l9g$be(B
Complex.rect(1,0) e$B$,@0?t$rJV$9$N$O%@%a$G$9$+!#e(B

e$B8D?ME*$K$Oe(B Rational.new
e$B$O<B:]$KM-M}?t$r@8@.$7$F$$$k$N$@$,!"$"$k8@8l5!e(B
e$BG=$K$h$j!“D>$A$K@55,2=$5$l$k!”$H9M$($F$b9=$o$J$$$H;W$$$^$9!#$b$A$m$s<Be(B
e$B:]$K$O$=$s$J5!G=$O$"$j$^$;$s$,!#e(B

e$B$3$l$O!"3]$1;;$G$O$J$/e(B **(aRational) e$B$NLdBj$_$?$$!#e(Bnurat e$B$G$O!"e(B

N = Float::MAX.to_i * 2
p Rational(N + 2, N + 1).to_f

e$B$H$9$k$He(B NaN e$B$G$9$,!"e(Brational-1.19 e$B$G$OJ#;($J$3$H$r$7$F$$$F!“e(B1.0 e$B$K$Je(B
e$B$j$^$9!#$7$+$7!“9)IW$NM>CO$,$”$k$H$$$&$3$H$@$J$”!#e(B

e$B@PDMHG$HF1$8$G$9$,!"$=$3$O%P%0$H9M$($F$$$$$G$7$g$&$M!#e(B

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

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

Rational() e$B$O!VM-M}?t2=!W$J$N$G$$$$$s$G$9!#@0?t$OM-M}?t$@$+$i!#e(B
Rational.new e$B$Ne(B Rational e$B$O%/%i%9$@$+$i!“e(BInteger e$B$rJV$5$l$k$H0cOB46$”$ke(B
e$B$s$G$9$h!#e(B

e$B$J$k$[$I!#e(B

e$B9=J8E*$JB&LL$,Bg$-$/$F!"%j%F%i%k$,$"$l$PBgJ,0c$$$^$9$,!"$=$l$H$be(B 1/1
e$B$de(B 1+0i e$B$,@0?t$G$"$k$N$b5$;}$o$k$$$G$9$+!#e(B

e$B$U$J$P$5$s$O!"!Ve(Bmathn.rbe$B$O%G%U%)%k%H$Ge(Brequiree$BGI!W$G$9$h$M!#;d$Oe(B
e$B!Ve(Bmathn.rbe$B$O4pK\E*$Ke(Brequiree$B$7$J$$GI!W$J$s$G!"$A$g$C$H463P$,0c$&$s$G$9$M!#e(B

e$B!Ve(B1+0ie$B$O@0?t$J$N$G!“e(BInteger(Fixnum)e$B!W$@$H$$$&$N$O!”:,5r$,<e$$$H;W$&!#$Je(B
e$B$<$J$i!“e(B1+0ie$B$O@0?t$G$b$”$k$1$IJL$N$b$N$G$b$"$k!#$?$H$($P<+A3?t$H$+$^$?e(B
e$BJL$N?tBN7O$H$+!#$"$k1i;;$N7k2L$r$=$l$r4^$`$b$C$H$b>.$5$$BN7Oe(B(e$B%/%i%9e(B)e$B$Ke(B
e$B;}$C$F$$$/$H$$$&J}?K$O!"E0Dl$G$-$J$$$N$G$O$J$$$+!#e(B

e$B$b$A$m$s!"!V?t$NMM$J0lHLE*$J$b$N$N07$$$,!"<BAu$NET9g$GJQ$J5$$r;H$o$5$le(B
e$B$F$h$&$G$O:$$k!#!W$H$$$&9M$($O!";d$bBg@Z$K$7$?$$$G$9!#e(Bmathne$B$,$J$/$F$b$=e(B
e$B$l$O2DG=$G$O$J$$$+$H!#e(B

e$BOC$rLa$9$H!"$$$^5DO@$K$J$C$F$$$k$N$O!"e(B

Rational::Unifye$B$,Dj5A$5$l$F$$$k$H$-e(BRational(1,
1)e$B$Oe(BIntegere$B$Ne(B1 e$B$rJV$9!#e(B
e$B$G$O!"e(BRational::Unifye$B$,Dj5A$5$l$F$$$k$H$-e(BRational.new(1,
1)e$B$bF1MM$Ke(B
Integere$B$GNI$$$+!)e(B

e$B$H$$$&$3$H$G$7$?!#;d$O!"$I$A$i$+$H$$$&$He(BRationale$B$N$^$^$,$$$$$+$J$H$$$&e(B
e$BDxEY$G!“3’$5$s$,e(BIntegere$B$,NI$$$H$$$&$J$i!”$=$l$G$b9=$o$J$$$+$J$"$H$$$&e(B
e$B46$8$G$9!#e(B

e$B$U$J$P$5$s$O!"!Ve(Bmathn.rbe$B$O%G%U%)%k%H$Ge(Brequiree$BGI!W$G$9$h$M!#;d$Oe(B
e$B!Ve(Bmathn.rbe$B$O4pK\E*$Ke(Brequiree$B$7$J$$GI!W$J$s$G!"$A$g$C$H463P$,0c$&$s$G$9$M!#e(B

mathn e$B$,L;X$7$F$$$k$b$N$N$[$&$,E}0l$,$H$l$F$k$H;W$$$^$9$,!"e(Bmathn
e$BGI$Ge(B
e$B$b$J$$$H;W$$$^$9!#e(B

e$B!Ve(B1+0ie$B$O@0?t$J$N$G!“e(BInteger(Fixnum)e$B!W$@$H$$$&$N$O!”:,5r$,<e$$$H;W$&!#$Je(B
e$B$<$J$i!“e(B1+0ie$B$O@0?t$G$b$”$k$1$IJL$N$b$N$G$b$"$k!#$?$H$($P<+A3?t$H$+$^$?e(B
e$BJL$N?tBN7O$H$+!#$"$k1i;;$N7k2L$r$=$l$r4^$`$b$C$H$b>.$5$$BN7Oe(B(e$B%/%i%9e(B)e$B$Ke(B
e$B;}$C$F$$$/$H$$$&J}?K$O!"E0Dl$G$-$J$$$N$G$O$J$$$+!#e(B

e$BOC$,$+$J$j%:%l$F$$$k$H;W$$$^$9!#$3$l$O?t3X$N5DO@$G$O$J$$$+$i$G$9!#2~$ae(B
e$B$F$$$&$^$G$b$J$/!"$=$&$$$&$3$H$r$$$&$J$i!“e(BRational(1,1) e$B$,e(B
Integer e$B$re(B
e$BJV$9:,5r$b$”$j$^$;$s!#e(B

e$B$H$$$&$3$H$G$7$?!#;d$O!"$I$A$i$+$H$$$&$He(BRationale$B$N$^$^$,$$$$$+$J$H$$$&e(B
e$BDxEY$G!“3’$5$s$,e(BIntegere$B$,NI$$$H$$$&$J$i!”$=$l$G$b9=$o$J$$$+$J$"$H$$$&e(B
e$B46$8$G$9!#e(B

Rational e$B$N$^$^$H$$$&$N$O!":_$jF@$J$$$H;W$$$^$9!#e(Bnew
e$B$@$+$iE,MQ30$H$$e(B
e$B$&$N$OM}2r$G$-$^$;$s!#$9$Y$FE,MQ$5$l$k$+!"$5$l$J$$$+!"$I$A$i$+$7$J$$$Je(B
e$B$$!"$H;W$$$^$9!#e(B

e$B$I$&$7$F$bG<F@$G$-$J$$$J$i!"?tCM%/%i%9$N$9$Y$F$N%3%s%9%H%i%/%?$rGS=|$9e(B
e$B$k$7$+$"$j$^$;$s!#e(BComplex.polar e$B$J$I$bF1$8$G$9!#e(B

e$B$b$7e(B Rational e$B$N$^$^$H$7$F!"e(BRational.new(1) + 0 e$B$be(B
Rational e$B$N$^$^$J$Ne(B
e$B$G$7$g$&$+!#!#e(BRationalnew(1,2) * 2 e$B$O$I$&$9$Y$-$G$9$+!#e(B

e$B$^$:$O!"e(BComplex.polar e$B$r$I$&=h$9$Y$-$+?V$M$?$$$N$G$9$,!#e(B

e$B$A$g$C$H<B83$7$F$$^$7$?!#86$5$s$Ne(B rational
e$B$O!"$+$1;;3d$j;;$,B.$$$N$G!"e(B
e$B$=$3$r??;w$F$
$^$7$?!#%Y%s%A$N7k2L$r$$k$H!“$=$l$>$lF@<jITF@<j$,$”$j$^e(B
e$B$9$,!"e(B1.8 e$B$G$O8_3Q$@$H;W$$$^$9!#e(B1.9 e$B$G$Oe(B nurat
e$B$,M%0L$G$9!#$D$$$G$K!"e(B
to_f e$B$b??;w$F$
$^$7$?!#e(B

http://www.funaba.org/archive/nurat-0.0.4-ho.tar.gz

e$B$G!"9M$($F$$$?$s$G$9$,!“L\E*$O!”:GB.$Ne(B rational
e$B$r:n$k$3$H$G$O$J$/$F!"e(B
e$B$h$j$h$$e(B rational e$B$G!“8=e(B rational
e$B$rCV$-49$($k$3$H$@!”$H;W$$$^$9!#e(B

e$BB.EY$r>e$2$k$H$+!"e(Bintegral?
e$B$N$h$&$J%a%=%C%I$r?7@_$9$k$H$+$O!"8e$G$b$$e(B
e$B$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$BB.EY$r>e$2$k$?$a$K%3!<%I$rJ#;($K$9$k$H!“8!>Z$,Fq$7$/$J$j$^$9!#86$5$s$Ne(B
rational
e$B$r8+$?46$8$G$O!”%F%9%H$O>/$J$/$H$b:#$Ne(B3e$B!"e(B4e$BG$OI,MW$K$J$k$H9Me(B
e$B$($F$$$^$9!#@[B.$J:GE,2=$O9T$-5M$^$j$,$A$G$9!#e(B

e$B:#!“B.EY>e$2$k$J$I$N:n6H$G!”$o$+$o$6%O!<%I%k$r>e$2$kI,MW$,$"$k$G$7$g$&e(B
e$B$+!#$3$3$^$GB.$/$J$i$J$1$l$P$J$i$J$$!"$H$$$&;XI8$,$"$l$P65$($F$/$@$5$$!#e(B
e$B:#I,MW$J$N$O!"%3!<%I$N3N$+$5!“J]<i$,2DG=$G!”>-Mh$N2~A1$N2j$rE&$J$$$3$He(B
e$B$@$H;W$$$^$9!#e(B

e$B86$5$s$O$b$&:n6H$r;O$a$F$$$k$H;W$$$^$9$,!"$=$l$O8e2s$7$K$7$F!“8!>ZEy$Ke(B
e$BCmNO$7$F$b$i$($J$$$G$7$g$&$+!#KM$N$[$&$b:G=i$Oe(B nurat-0.0.4-ho
e$B$G<B83$7e(B
e$B$?$h$&$J%3!<%I$rF~$l$k$D$b$j$O$”$j$^$;$s!#e(B

e$B@h$:$O!“B.EY$O!“8=e(B rational
e$B$h$jL@$+$KB.$1$l$P$$$$!”$H;W$$$^$9!#B.$/$7e(B
e$B$?$1$l$P!“B.$/$G$-$k$3$H$O>ZL@$G$-$?$H;W$$$^$9!#:#!”$G$-$k$@$1B.$/$7$Je(B
e$B$1$l$P$J$i$J$$!”$H$$$&$3$H$O$J$$$H;W$$$^$9!#e(B

e$BM>7W$J?75!G=$OF~$l$J$$$3$H$K$7$^$9!#e(BFloat#to_r e$B$de(B
Rational(string) e$B$Ne(B
e$B$h$&$J!“EvA3$”$C$F$h$$$H9g0U$,F@$i$l$F$$$k$b$N$OF~$l$^$9!#e(B

inspect e$B$N=q<0$O!"8=e(B rational e$B$HF1$8!"e(Bnew e$B$OEvLLe(B
private e$B$G!"e(Bnew!e$B!"e(B
reduce e$B$b;D$7$?$H$3$m$+$i;O$a$^$9!#e(B

e$B0J>e$N$h$&$J46$8$G?J$a$^$;$s$+!#KM$H$7$F$O!"<!2s$Ne(B 1.9
e$B%j%j!<%9$ND>8ee(B
e$B$K3HD%%i%$%V%i%j$H$7$FF~$l$k$3$H$rL;X$7$?$$$G$9!#e(B

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

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

e$B$G!"9M$($F$$$?$s$G$9$,!“L\E*$O!”:GB.$Ne(B rational e$B$r:n$k$3$H$G$O$J$/$F!"e(B
e$B$h$j$h$$e(B rational e$B$G!“8=e(B rational e$B$rCV$-49$($k$3$H$@!”$H;W$$$^$9!#e(B

e$B$=$l$rBh0l$NL\I8$H$7$^$7$g$&!#e(B

e$BB.EY$r>e$2$k$H$+!"e(Bintegral? e$B$N$h$&$J%a%=%C%I$r?7@_$9$k$H$+$O!"8e$G$b$$e(B
e$B$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$BB.EY$r>e$2$k$?$a$K%3!<%I$rJ#;($K$9$k$H!“8!>Z$,Fq$7$/$J$j$^$9!#86$5$s$Ne(B
rational e$B$r8+$?46$8$G$O!”%F%9%H$O>/$J$/$H$b:#$Ne(B3e$B!"e(B4e$BG$OI,MW$K$J$k$H9Me(B
e$B$($F$$$^$9!#@[B.$J:GE,2=$O9T$-5M$^$j$,$A$G$9!#e(B

e$B$A$g$C$H8m2r$,$"$k$h$&$G$9$,!";d$OFC0[$J%"%k%4%j%:%$G%9%T!<%I$r>e$2$he(B e$B$&$H;W$C$?$j$7$F$J$+$C$?$s$G$9$h!#e(BStein e$B$Ne(B GCD e$B$N%"%k%4%j%:%$@$1$ONc30e(B
e$B$G$9$,!#e(B

e$B:#2s?7$7$$%a%=%C%I$rIU$12C$($h$&$H$b$7$F$$$^$;$s!#e(Bintegral?
e$B$O8=9T$Ne(B
rational-1.19 e$B$Ne(B integer? e$B$NCf?H$r0$=$&$H$7$?$@$1$G$9!#e(B

e$B$5$F!"e(B

e$B$d$O$j!"?7e(B rational
e$B$N%a%s%F%J$O!"$U$J$P$5$s$K$d$C$F$$$?$@$1$J$$$G$7$ge(B
e$B$&$+!)e(B

e$BJ}?K$K$D$$$F;d$H$[$H$s$I0U8+$O0lCW$7$F$$$^$9$7!"$9$G$K$+$J$j$N:n6H$re(B
e$B=*$($i$l$F$$$^$9!#8=;~E@$G$=$l$,:GA1$@$H;W$$$^$9!#e(B

e$BM>7W$J?75!G=$OF~$l$J$$$3$H$K$7$^$9!#e(BFloat#to_r e$B$de(B Rational(string) e$B$Ne(B
e$B$h$&$J!“EvA3$”$C$F$h$$$H9g0U$,F@$i$l$F$$$k$b$N$OF~$l$^$9!#e(B

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

inspect e$B$N=q<0$O!"8=e(B rational e$B$HF1$8!"e(Bnew e$B$OEvLLe(B private e$B$G!"e(Bnew!e$B!"e(B
reduce e$B$b;D$7$?$H$3$m$+$i;O$a$^$9!#e(B

inspecte$B!"e(Bnew e$B$K$D$$$F$OF10U$7$^$9!#e(B
new!e$B!“e(Breduce
e$B$O!”$3$3$^$G$N5DO@[email protected]$H$7$F!"GQ;_$G$$$$$8$c$J$$$G$9$+!)e(B
integral? e$B$b8e2s$7!#e(B

e$B0J>e$N$h$&$J46$8$G?J$a$^$;$s$+!#KM$H$7$F$O!"<!2s$Ne(B 1.9 e$B%j%j!<%9$ND>8ee(B
e$B$K3HD%%i%$%V%i%j$H$7$FF~$l$k$3$H$rL;X$7$?$$$G$9!#e(B

e$B$$$(!"$3$3$O!VAH$9~$!W$rL;X$7$^$;$s$+!)@N$^$D$b$H$5$s$,!“e(BT_RATIONAL
e$B$NCM$r$/$l$ke(B(0x0f?)e$B$H8@$C$?3P$($b$”$k$7!#e(B

e$B$3$3$^$GB.$/$J$i$J$1$l$P$J$i$J$$!"$H$$$&;XI8$,$"$l$P65$($F$/$@$5$$!#e(B

e$B;d$N?t3X$C$]$$%W%m%0%i%`$,!“e(BI/O
e$B$,$J$$$N$K=hM}$Ke(B10e$BJ,$H$+2?;~4V$H$+$+$+$Ce(B
e$B$F!”<BMQ$K$J$k!?$J$i$J$$$N%/%j%F%#%+%k$J$H$3$m$K$$$k$s$G$9$h!#$?$V$sBge(B
e$B$-$/e(B Rational
e$B$N=hM}B.EY$K0MB8$7$F$$$k$s$G$9!#$3$&$7$FM_$7$$$H$$$&$N$"e(B
e$B$l$P!"e(BRational
e$BAH$9~$$,0lC6C#@.$5$l$?8e$GDs0F$5$;$F$$$?$@$-$^$9!#e(B

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

In message “Re: [ruby-dev:33905] Re: rational, complex and mathn”
on Fri, 22 Feb 2008 12:58:12 +0900, “NARUSE, Yui”
[email protected] writes:

|# e$B$3$N$X$s$O$^$D$b$H$5$s$N0U8~$K$b$h$j$^$9$,!"e(B
|# Rational e$B$Ne(B 1.9 e$B$G$NAH$9~$$O4{DjO)@~$G$7$?$h$Me(B

e$B$O$$!#e(BComplexe$B$K$D$$$F$be(B1.9e$B$N4V$KAH$_9~$s$G$h$$$H;W$$$^$9!#e(B

e$B$G!"e(BDavid Flanagane$B$,5c$/$H!#e(B

e$B@.@%$G$9!#e(B

Shin-ichiro HARA wrote:

e$B0J>e$N$h$&$J46$8$G?J$a$^$;$s$+!#KM$H$7$F$O!"<!2s$Ne(B 1.9 e$B%j%j!<%9$ND>8ee(B
e$B$K3HD%%i%$%V%i%j$H$7$FF~$l$k$3$H$rL;X$7$?$$$G$9!#e(B

e$B$$$(!"$3$3$O!VAH$9~$!W$rL;X$7$^$;$s$+!)@N$^$D$b$H$5$s$,!“e(BT_RATIONAL
e$B$NCM$r$/$l$ke(B(0x0f?)e$B$H8@$C$?3P$($b$”$k$7!#e(B

e$B<!2s$G$b$&AH$9~$s$G$7$^$C$F$$$$$N$G$O$J$$$G$7$g$&$+!"e(Bnuby
e$B$N;~$K<j85$Ge(B
1.9 e$B$NAH$9~$$K$7$F$
$^$7$?$,IaDL$KF0$$$F$$$^$7$?$7!#e(B

JRuby
e$BEy$NMm$_$b9M$($k$H!“5DO@$K$J$C$F$$$k$b$N$O$5$F$*$-!”<BAu$,7h$^$C$Fe(B
e$B$$$k$b$N$OAa$$CJ3,$GF~$l$F$7$^$C$?J}$,;W$C$F$$$k$N$G$9$,!#e(B

e$B$3$N$X$s$O$^$D$b$H$5$s$N0U8~$K$b$h$j$^$9$,!"e(B

Rational e$B$Ne(B 1.9 e$B$G$NAH$9~$$O4{DjO)@~$G$7$?$h$Me(B

e$B$G!"9M$($F$$$?$s$G$9$,!“L\E*$O!”:GB.$Ne(B rational e$B$r:n$k$3$H$G$O$J$/$F!"e(B
e$B$h$j$h$$e(B rational e$B$G!“8=e(B rational e$B$rCV$-49$($k$3$H$@!”$H;W$$$^$9!#e(B

e$B$=$l$rBh0l$NL\I8$H$7$^$7$g$&!#e(B

e$BF10U$7$F$b$i$($F$h$+$C$?!#e(B

e$B:#2s?7$7$$%a%=%C%I$rIU$12C$($h$&$H$b$7$F$$$^$;$s!#e(Bintegral? e$B$O8=9T$Ne(B
rational-1.19 e$B$Ne(B integer? e$B$NCf?H$r0$=$&$H$7$?$@$1$G$9!#e(B

e$B8=9Te(B rational e$B$K$J$$$b$N$O!"?7$7$$!"$H9M$($F$$$^$9!#e(Bnurat
e$B$K$"$ke(B
quotrem e$B$de(B reciprocal e$B$b:o$j$^$9!#e(BPrecision
e$B$NBP1~$O$I$&$9$k$+$J!#e(B

e$B$d$O$j!"?7e(B rational e$B$N%a%s%F%J$O!"$U$J$P$5$s$K$d$C$F$$$?$@$1$J$$$G$7$ge(B
e$B$&$+!)e(B

e$B%a%s%F%J$O$d$k$D$b$j$G$7$?!#86$5$s$b$5$l$k$H;W$$$^$9$,!"EvLL<g$?$k:n6He(B
e$B$OG$$;$k$H$$$&0UL#$J$i!"Q(1[$J$,$i0z$-<u$1$5$;$F$b$i$$$^$9!#e(B

e$BJ}?K$K$D$$$F;d$H$[$H$s$I0U8+$O0lCW$7$F$$$^$9$7!"$9$G$K$+$J$j$N:n6H$re(B
e$B=*$($i$l$F$$$^$9!#8=;~E@$G$=$l$,:GA1$@$H;W$$$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

inspecte$B!"e(Bnew e$B$K$D$$$F$OF10U$7$^$9!#e(B
new!e$B!“e(Breduce e$B$O!”$3$3$^$G$N5DO@[email protected]$H$7$F!"GQ;_$G$$$$$8$c$J$$$G$9$+!)e(B
integral? e$B$b8e2s$7!#e(B

e$B$G$O!"$=$&$7$^$7$g$&$+!#e(B

e$B$$$(!"$3$3$O!VAH$9~$!W$rL;X$7$^$;$s$+!)@N$^$D$b$H$5$s$,!“e(BT_RATIONAL
e$B$NCM$r$/$l$ke(B(0x0f?)e$B$H8@$C$?3P$($b$”$k$7!#e(B

e$B$=$&$J$s$G$9$+!#=i$a$FJ9$$$?$h$&$J!#e(B

e$B;d$N?t3X$C$]$$%W%m%0%i%`$,!“e(BI/O e$B$,$J$$$N$K=hM}$Ke(B10e$BJ,$H$+2?;~4V$H$+$+$+$Ce(B
e$B$F!”<BMQ$K$J$k!?$J$i$J$$$N%/%j%F%#%+%k$J$H$3$m$K$$$k$s$G$9$h!#$?$V$sBge(B
e$B$-$/e(B Rational e$B$N=hM}B.EY$K0MB8$7$F$$$k$s$G$9!#$3$&$7$FM_$7$$$H$$$&$N$"e(B
e$B$l$P!"e(BRational e$BAH$9~$$,0lC6C#@.$5$l$?8e$GDs0F$5$;$F$$$?$@$-$^$9!#e(B

rational
e$B$r=q$$$?7P83$b$"$k$7!“B.EY2~A1$N%”%$%G%#%"$b$"$k$H;W$&$N$G!"e(B
e$B86$5$s$N6(NO$OIT2D7g$G$9!#$h$m$7$/$*4j$$$7$^$9!#e(B

|# e$B$3$N$X$s$O$^$D$b$H$5$s$N0U8~$K$b$h$j$^$9$,!"e(B
|# Rational e$B$Ne(B 1.9 e$B$G$NAH$9~$$O4{DjO)@~$G$7$?$h$Me(B

e$B$O$$!#e(BComplexe$B$K$D$$$F$be(B1.9e$B$N4V$KAH$_9~$s$G$h$$$H;W$$$^$9!#e(B

e$B$G$O!"0l=o$K$d$C$F$7$^$C$F$$$$$G$9$+!#e(B

rational e$B$He(B complex
e$B$OAj8_0MB8$7$F$k$H$3$m$,$"$k$N$G!“N>J}AH$_$3$a$i$le(B
e$B$l$P!”$=$N$"$?$j$O4JC1$K$J$j$^$9!#e(B

e$B$O$$!#e(BComplexe$B$K$D$$$F$be(B1.9e$B$N4V$KAH$_9~$s$G$h$$$H;W$$$^$9!#e(B

e$BAH$$3$$O$J$$$H;W$C$F$$$?$N$G$9$,!"AH$_$3$`>l9g!“3NG’$9$Y$-$3$H$,$”$je(B
e$B$^$9!#e(B

  • ruby e$B$G=q$+$l$?$^$^$N%3!<%I$,$"$ke(B

    rational e$B$h$j$be(B complex
    e$B$N$[$&$,B?$$$N$G$9$,!“e(BComplex(string) e$B$J$I$O!“e(B
    e$B7k6I!“e(Bruby
    e$B$G$N$”$i$f$k?tCMI=8=$,$”$jF@$k$N$G!”??LLL\e(B/e$B6rD>$Ke(B C
    e$B$G=qe(B
    e$B$/$H!"$=$l$@$1$G$b7k9=$J;E;v$K$J$j$=$&$G$9!#e(BComplex(stinrg)
    e$B$He(B
    String#to_c e$B$G!"873J$JHG$H$=$&$G$J$$$b$N$N=q$-J,$1$,I,MW$G$9$7!#e(B

    1. C e$B$G=q$-$J$*$9e(B
    2. (e$BEvLL$Oe(B) prelude e$B$K=q$$$F$*$/e(B
    3. e$B$=$3$OBE6($7$Fe(B require e$B$5$;$ke(B
  • e$B>e=q$-$5$l$k%a%=%C%Ie(B

    {Fixnum,Bignum}#quo e$B$N?6Iq$$$O8GDj$5$l$k$3$H$K$J$j$^$9!#e(BMath
    e$B$N4X?te(B
    e$B$bDj5A$,JQ$j$^$9e(B

    1. e$B$b$H$+$iDj5A$rJQ$($ke(B
    2. (e$BEvLL$Oe(B) prelude e$B$K=q$$$F$*$/e(B
    3. e$B$=$3$OBE6($7$Fe(B require e$B$5$;$ke(B
  • coerce

    e$B4{B8$N?tCM%/%i%9$O$*8_$$$N$3$H$rCN$C$F$$$^$9!#3HD%%i%$%V%i%j$G$O!"e(B
    coerce e$BMj$_$G$9!#e(B

    1. coerce e$BMj$_$O$d$a$ke(B
    2. (e$BEvLL$Oe(B) coerce e$BMj$_$G$$$$e(B
  • e$BFbItI=8=e(B

    e$B$3$N$^$^e(B T_STRUCT e$B$r$D$+$&$N$,$$$$$N$+$o$+$j$^$;$s!#e(B

e$B3HD%%i%$%V%i%j$J$i!"$o$j$H4JC1$KCV$-49$($i$l$=$&$G$9$,!“AH$$3$$@$H7ke(B
e$B9=$d$k$3$H$,$”$k$N$G!"@h$:$Oe(B rational
e$B$@$1$KCmNO$7$?$[$&$,$$$$$N$+$b!#e(B
complex
e$B$OB>$N?M$,$d$C$F$b$$$$$G$9$7!#FHNO$G??LLL$KN>J}$d$k$HAH$_$3$ae(B
e$B$k$N$O?t%v7n8e$K$J$k$+$b$7$l$^$;$s!#e(B

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

In message “Re: [ruby-dev:33914] Re: rational, complex and mathn”
on Sat, 23 Feb 2008 14:27:44 +0900, Tadayoshi F.
[email protected] writes:

|e$BAH$$3$$O$J$$$H;W$C$F$$$?$N$G$9$,!"AH$_$3$`>l9g!“3NG’$9$Y$-$3$H$,$”$je(B
|e$B$^$9!#e(B

(e$BCfN,e(B)

|e$B3HD%%i%$%V%i%j$J$i!“$o$j$H4JC1$KCV$-49$($i$l$=$&$G$9$,!“AH$$3$$@$H7ke(B
|e$B9=$d$k$3$H$,$”$k$N$G!”@h$:$Oe(B rational e$B$@$1$KCmNO$7$?$[$&$,$$$$$N$+$b!#e(B
|complex e$B$OB>$N?M$,$d$C$F$b$$$$$G$9$7!#FHNO$G??LLL$KN>J}$d$k$HAH$_$3$ae(B
|e$B$k$N$O?t%v7n8e$K$J$k$+$b$7$l$^$;$s!#e(B

e$B$<$s$<$s$“$;$kI,MW$O$J$$$H;W$&$N$G!”$N$s$S$j$d$j$^$7$g$&!#e(B
rationale$B$N$a$I$,$D$$$F$+$ie(Bcomplexe$B$GNI$$$H;W$$$^$9!#e(B

nurat
e$B$rAH$$3$s$G$$^$7$?!#:GDc8BI,MW$J=$@5$@$1$K$J$C$F$$$k$H;W$$$^$9!#e(B
e$B%3!<%I$,$I$N$h$&$K9=@.$5$l$F$$$k$+$h$/$o$+$C$F$$$J$$$N$G!“$”$?$i$7$$%3!<e(B
e$B%I$rF~$l$k>l=j$,E,@Z$G$J$+$C$?$j$9$k$H;W$$$^$9!#B>$K$b$$$m$$$m$HE,@Z$Ge(B
e$B$J$$$H$3$m$,$"$k$+$b$7$l$^$;$s!#e(B

new! e$B$He(B new e$B$O%W%i%$%Y!<%H$H$7$F;D$7$F$"$j$^$9!#e(B

lib/rational.rb
e$B$H$$$&%U%!%$%k$O;D$7$F$“$j!”$$$/$D$+$N=EMW$G$J$$JLL>$de(B
Integer#gcd e$B$J$I$rDs6!$7$^$9!#e(B

e$B$3$l$GAH$$3$$,Fq$7$$$HH=CG$5$l$k$h$&$J$3$H$,$"$l$P!"3HD%%i%$%V%i%j$Ge(B
e$B$b$h$$$H;W$$$^$9!#e(B

http://www.funaba.org/archive/r19rat.diff.gz

e$B0[5D$,$J$1$l$P!“<c43$N$7$N8e!”<!=5Kv$K$G$be(B trunk
e$B$K%3%_%C%H$7$h$&e(B
e$B$H;W$$$^$9!#e(B

http://www.funaba.org/archive/r19ratcomp.diff.gz

e$B$D$$$G$K!"2C8:;;$rB.$/$9$k<B83$r$7$^$7$?!#e(B

http://www.funaba.org/archive/nurat-0.0.6-ho.tar.gz

rational e$B$He(B complex e$B$re(B 1.9 e$B$KAH$_$3$`:n6H$r$7$^$7$?!#e(B

rational e$B$K4XO"$7$?<g$JJQ99E@e(B

{NilClass,Integer,Float}#to_r e$B$NDI2C!#e(B
Precision e$B$Ne(B Rational e$BBP1~!#e(B
quo e$B$NDj5AJQ99!#e(B
Fixnume$B!"e(BBignum e$B$Ne(B ** e$B$NDj5AJQ99!#e(B
Numeric#{numerator,denominator} e$B$NDI2C!#e(B
reduce e$B$NGQ;_!#e(B

newe$B!"e(Bnew! e$B$O%W%i%$%Y!<%H$H$7$FB8:_$9$k!#e(B
lib/rational.rb e$B$H$$$&%U%!%$%k$O;D$9!#e(B

complex e$B$K4XO"$7$?<g$JJQ99E@e(B

{NilClass,Integer,Float}#to_c e$B$NDI2C!#e(B
Numeric#{real,image,imag,im} e$B$NDI2C!#e(B
Numeric#{angle,arg,polar,conjugate,conj} e$B$NDI2C!#e(B

newe$B!"e(Bnew! e$B$O%W%i%$%Y!<%H$H$7$FB8:_$9$k!#e(B
lib/complex.rb e$B$H$$$&%U%!%$%k$O;D$9!#e(B

e$B@PDMHG$G$O!“e(Bcomplex.rb e$B$Ge(B Math
e$B$N4X?t$r:FDj5A$7$F$$$^$9!#$3$N$”$?$j$re(B
e$B$I$&$9$Y$-$+$O7h$a$+$M$^$9!#:#$N$H$3$me(B complex.rb
e$B$K$[$$=$N$^$^;D$7$Fe(B
e$B$“$j$^$9!#C1$KMxMQ<T8~$1$KMQ0U$5$l$F$$$k$@$1$G$J$/!“e(Bcomplex
e$B$N<BAu$K$be(B
e$BI,MW$J$N$G$9$,!”:#8=:_$O!”$3$l$K0MB8$7$J$$$h$&$KFHN)$7$?%3!<%I$r;}$D$he(B
e$B$&$K$7$F$$$^$9!#e(B

e$B:G=E$K$O!“e(BMath
e$B$rJQ99$9$k$3$H$K$J$k$+$b$7$l$^$;$s$,!”$=$N>l9g$O!"$*e(B
e$B$=$i$/e(B mathn.rb
e$B$N%3!<%I$b$D$+$&$3$H$K$J$k$H;W$$$^$9!#$=$&$J$k$H!"e(B
mathn.rb e$B$Ne(B / e$B$N:FDj5A$He(B Unify e$B$NDj5A!"e(BPrime
e$B$NDj5A$O;D$k$G$7$g$&$,!"e(B
rational.rbe$B!"e(Bcomplex.rbe$B!"e(Bmathn.rb e$B$NKX$I$,e(B ruby
e$BK\BN$K5[<}$5$l$k7A$K$Je(B
e$B$k$H;W$$$^$9!#e(B

http://www.funaba.org/archive/r19ratcomp.diff.gz
http://www.funaba.org/archive/r19ratcomp-test.tar.gz

e$B$“$H!”$3$l$K$h$C$F!“$$$/$D$+$N4{CN$N%P%0$,D>$k$H;W$$$^$9!#$”$?$i$7$$%Pe(B
e$B%0$rF~$l$F$$$k$+$b$7$l$^$;$s$,!#e(B