Rational

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

e$B$U$J$P$G$9!#e(B

#else /* flt */
f = (float)ldexp(f, FLT_MANT_DIG);
e -= FLT_MANT_DIG;
#endif

return RT_S_NEW2(klass, RT_MUL(rb_dbl2big(f),
RT_POW(rb_int2big(2), INT2FIX(e))), INT2FIX(1));
}

e$B%3!<%I>e$N?t;ze(B 2 e$B$O!"e(BFLT_RADIX e$B$K$9$Y$-$+$b!#e(B

e$B$3$l$G$$$$$_$?$$!#;d$N%3!<%I$O9)IW$7$?$D$b$j$G!"$+$($C$F@:EY$re(B
e$B$*$H$7$F$7$^$C$F$$$?$h$&$G$9!#e(B

e$B$H$3$m$Ge(B /* flt /
e$B$NJ}$O$J$<=q$$$?$N$G$9$+!)e(Brubye$B$Ne(BFloate$B$O!"e(B
double e$B$J$N$G!"e(B/
dbl */e$B$NJ}$G$$$$$s$G$9$h$M!)e(B

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

|e$B$9$$$^$;$s!"e(Brationalize e$B$H$$$&$N$rCN$i$J$$$N$G$9$,!"e(B
|e$B$3$l$O2?$r5a$a$k4X?t$J$N$G$7$g$&!)e(B

CommonLispe$B$K$OIbF0>.?tE@?t$rM-M}?t$KJQ49$9$k4X?t$,Fs$D$"$C$F!"e(B
rationale$B$O9bB.$@$,IT@53Ne(B(e$B$H$$$&$+$J$s$H$$$&$+e(B)e$B$G!"e(B
rationalizee$B$ODcB.$@$,$h$jD>4QE*e(B(e$B$H$$$&$+$J$s$H$$$&$+e(B)e$B$J7k2Le(B
e$B$rJV$9$=$&$G$9!#0J2<!"e(BCLtL2e$B$+$i$N0zMQ$G$9!#e(B

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

(float (rational x) x) == x

and

(float (rationalize x) x) == x

rationalizee$B$C$F2x$7$$$G$9$M!#LLGr$=$&$J$N$G!"$I$3$+$+$i%Q%/$C$Fe(B
e$B<BAu$K2C$($h$&$+$H;W$$$^$9!#e(Bto_re$B$K$Oe(Brationale$B$+$J!#e(B

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

In [ruby-dev:28536] the message: “[ruby-dev:28536] Re: Rational”, on
Apr/11 00:08(JST) Shin-ichiro HARA writes:

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

e$B$d$C$Q$j@0M}$;$:e(B(^^;)e$B;W$$$D$$$?C<$+$i$40U8+$r;G$$$?$$$N$G$9$,!“e(B
e$B$^$:e(BRational#inspecte$B$O$I$&$”$k$Y$-$G$7$g$&!#e(B

e$B@PDM$5$s$N%*%j%8%J%k$G$Oe(B Rational(1, 3).to_se$B$Oe(B"1/3"e$B$G!"e(B
Rational(1, 3).inspecte$B$Oe(B"Rational(1, 3)"e$B$G$9!#e(B

e$B;d$O$3$l$be(B"1/3"e$B$G$$$$$N$G$O$J$$$+$H;W$&$N$G$9$,!"$I$&$Ge(B
e$B$7$g$&!#$H$$$&$N$O!"M-M}?t$NG[Ns$re(Bpe$B$GI=<($7$?$j$9$k$H!"e(B
"Rational(1, 3)"e$B$G$O$+$5$P$j$9$.$k$+$i$G$9!#$^$?!“e(Bpe$B$Ge(B
1/3e$B$,I=<($5$l$l$P!”$^$:4V0c$$$J$/e(BRationale$B$rI=$7$F$$$k$He(B
e$BH=CG$G$-$^$9!#e(B

Rationale$B$,AH$_9~$_e(B(e$B$^$?$OI8=`E:IUe(B)e$B$K$J$k$s$@$C$?$ie(B,
1/3e$B$,e(B
Rationale$B$N%$%s%9%?%s%9$rI=$7$F$$$k$H<gD%$O$7$d$9$$$G$9$Me(B.
e$B;d$H$7$F$Oe(B, 1/3e$B$HI=<($5$l$F$b$+$^$o$J$$$G$9e(B.

e$B$?$@$7e(Beval(Rational(1,3).inspect)e$B$Oe(BRational(1,3)e$B$HA4A3$Ae(B
e$B$&$b$N$K$J$C$F$7$^$$$^$9!#e(B

inspecte$B$C$F$=$&$$$&$3$H$rJ]>Z$7$F$$$J$$$N$Ge(B,
e$B$+$^$o$J$$$N$G$Oe(B?

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

e$B$U$J$P$G$9!#e(B

e$B$H$3$m$Ge(B /* flt / e$B$NJ}$O$J$<=q$$$?$N$G$9$+!)e(Brubye$B$Ne(BFloate$B$O!"e(B
double e$B$J$N$G!"e(B/
dbl */e$B$NJ}$G$$$$$s$G$9$h$M!)e(B

e$B$=$&$G$9!#e(B/* flt */ e$B$O!"e(Bfloat
e$B$r$D$+$C$F$$$kB>$N=hM}7O$HHf$Y$k$N$K$D$+$Ce(B
e$B$?$@$1$G$9!#e(Bruby e$B$G$OI,MW$J$$$G$9!#e(B

e$B1J0fe(B@e$BCNG=!%6e9)Bg$G$9!%e(B

From: [email protected] (e$B@PDM7=<ye(B)
Subject: [ruby-dev:28537] Re: Rational
Date: Tue, 11 Apr 2006 04:16:35 +0900
Message-ID: E1FT1tv-0001fZ-00@gentoo

e$B$?$@$7e(Beval(Rational(1,3).inspect)e$B$Oe(BRational(1,3)e$B$HA4A3$Ae(B
e$B$&$b$N$K$J$C$F$7$^$$$^$9!#e(B

inspecte$B$C$F$=$&$$$&$3$H$rJ]>Z$7$F$$$J$$$N$Ge(B, e$B$+$^$o$J$$$N$G$Oe(B?

String#to_r (or String#rational)
e$B$J$s$F$N$ODs6!$7$J$$$N$G$7$g$&$+!%e(B
e$BNc$($Pe(B “2/3”.to_r => Rational(2, 3) e$B$H$+e(B “4”.to_r =>
Rational(4, 1) e$B$H$+e(B
“2/(3/5)”.to_r => Rational(10, 3)
e$B$H$+$GF@$i$l$k$H3Z$,$G$-$F4r$7$=$&$G$9!%e(B
“1.3/0.6”.to_r
e$B$N$h$&$J$b$N$r$I$&$9$k$+$OMW8!F$$+$b$7$l$^$;$s$,!%!%!%e(B

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

e$B$^$:LdBjE@$r@0M}$7$^$9!#!J$D$E$/!Ke(B

e$B$d$C$Q$j@0M}$;$:e(B(^^;)e$B;W$$$D$$$?C<$+$i$40U8+$r;G$$$?$$$N$G$9$,!“e(B
e$B$^$:e(BRational#inspecte$B$O$I$&$”$k$Y$-$G$7$g$&!#e(B

e$B@PDM$5$s$N%*%j%8%J%k$G$Oe(B Rational(1,
3).to_se$B$Oe(B"1/3"e$B$G!"e(B
Rational(1, 3).inspecte$B$Oe(B"Rational(1, 3)"e$B$G$9!#e(B

e$B;d$O$3$l$be(B"1/3"e$B$G$$$$$N$G$O$J$$$+$H;W$&$N$G$9$,!"$I$&$Ge(B
e$B$7$g$&!#$H$$$&$N$O!"M-M}?t$NG[Ns$re(Bpe$B$GI=<($7$?$j$9$k$H!"e(B
"Rational(1, 3)"e$B$G$O$+$5$P$j$9$.$k$+$i$G$9!#$^$?!“e(Bpe$B$Ge(B
1/3e$B$,I=<($5$l$l$P!”$^$:4V0c$$$J$/e(BRationale$B$rI=$7$F$$$k$He(B
e$BH=CG$G$-$^$9!#e(B

e$B$?$@$7e(Beval(Rational(1,3).inspect)e$B$Oe(BRational(1,3)e$B$HA4A3$Ae(B
e$B$&$b$N$K$J$C$F$7$^$$$^$9!#e(B

e$B$I$&;W$$$^$9!)e(B

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

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

e$B$?$@$7e(Beval(Rational(1,3).inspect)e$B$Oe(BRational(1,3)e$B$HA4A3$Ae(B
e$B$&$b$N$K$J$C$F$7$^$$$^$9!#e(B

inspecte$B$C$F$=$&$$$&$3$H$rJ]>Z$7$F$$$J$$$N$Ge(B, e$B$+$^$o$J$$$N$G$Oe(B?

e$B$=$&$G$9$+!#@PDM$5$s$,$=$&$$$&$J$i$$$$$+$J!#e(B

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

e$B$U$J$P$G$9!#e(B

e$B$9$$$^$;$s!"e(Brationalize e$B$H$$$&$N$rCN$i$J$$$N$G$9$,!"e(B
e$B$3$l$O2?$r5a$a$k4X?t$J$N$G$7$g$&!)e(B

(rational 0.3d0) => 5404319552844595/18014398509481984
(rationalize 0.3d0) => 3/10

e$B?t3XE*$K$OO"J,?tE83+$J$N$G!"$3$s$J46$8$G<BAu$G$-$k$_$?$$$G$9!#e(B

def rationalize(x, e = Float::EPSILON)
if x < 0
-rationalize(-x, e)
else
rational_within(x - e, x + e)
end
end

def rational_within(x, y)
xq, yq = x.floor, y.floor
if xq == x || x == y
Rational(xq)
elsif xq < yq
Rational(xq + 1)
else
xq + 1/rational_within(1/(y - yq), 1/(x - xq))
end
end

e$B;_$^$i$J$$$3$H$,$"$k$+$J!#e(B

e$B$3$l$r$b$&$9$3$70BA4$K$7$F#C$G<BAu$7$?$H$7$F$b7k9=C1=ce(B
e$B$J$N$G!"$=$l$re(B Float#to_r e$B$K$7$F$b$^$:$/$O$J$$$+$J$H$$$&e(B
e$B5$$b$7$F$-$^$7$?!#$&!<$`!#e(B

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

e$B1J0fe(B@e$BCNG=!%6e9)Bg$G$9!%e(B

String#to_r (or String#rational) e$B$J$s$F$N$ODs6!$7$J$$$N$G$7$g$&$+!%e(B
e$BNc$($Pe(B “2/3”.to_r => Rational(2, 3) e$B$H$+e(B “4”.to_r => Rational(4, 1) e$B$H$+e(B
“2/(3/5)”.to_r => Rational(10, 3) e$B$H$+$GF@$i$l$k$H3Z$,$G$-$F4r$7$=$&$G$9!%e(B
“1.3/0.6”.to_r e$B$N$h$&$J$b$N$r$I$&$9$k$+$OMW8!F$$+$b$7$l$^$;$s$,!%!%!%e(B

e$B8=:_e(B rational 1.00 e$B$O3HD%%i%$%V%i%j$J$N$G!"e(BString#to_r
e$B$de(B Float#to_r
e$B$O<BAu$7$F$$$J$$$N$G$9$,!“AH$9~$$K$J$l$P:n$kI,MW$,$”$j$^$9$h$M!#e(B

e$B$b$C$H$be(B rational 1.00 e$B$G$b4{$Ke(B Rational() e$B4X?t$Oe(B
String e$B$de(B Float
e$B$r<u$1IU$1$F$$$^$9!#e(BRational(“2/3”) e$B$Oe(B Rational(2, 3)
e$B$G!"e(B
Rational(“4”) e$B$Oe(B Rational(4, 1) e$B$G$9!#e(B

Rational(“2/(3/5)”) e$B$O$5$9$,$K$@$a$G$9$1$I!#e(B

if xq == x || x == y
Rational(xq)
elsif xq < yq
Rational(xq + 1)
else
xq + 1/rational_within(1/(y - yq), 1/(x - xq))
end
end

e$B$3$l$G$Oe(B Rational(Math::PI) e$B$,e(B 3
e$B$K$J$C$F$7$^$$$^$7$?!#e(B

def rational_within(x, y)
xq, yq = x.floor, y.floor
if x == y
Rational(x)
elsif xq == x
Rational(xq)
elsif xq < yq
Rational(xq + 1)
else
xq + 1/rational_within(1/(y - yq), 1/(x - xq))
end
end

e$B$H$7$J$$$H$^$:$$$+$J!#e(B

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

e$B$U$J$P$G$9!#e(B

e$BKM$,$_$?$H$3$m$@$H!“e(B[ruby-dev:28514] e$B$N$”$?$j$H$+e(B inspect e$B$,0c$&$J$I$Ge(B
e$B$9$+$M!#86$5$s$N$O!"e(B

Rational.new(Rational.new(3,1),3)

e$B$J$s$F=q$$$F$bBg>fIW$G$9$Me(B

e$B$A$g$C$H%*%U%H%T%C%/$J$s$G$9$1$I!"$=$s$J=q$-J}$r5v$9$h$&$K<BAue(B
e$B$7$?$D$b$j$,$J$$$N$G!"IT;W5D$K;W$C$FD4$Y$F$_$?$i3N$+$KF0$-$^$9e(B
e$B$M!#6vA3!#e(B

e$B%f!<%/%j%C%I$N8_=uK!$N%"%k%4%j%:%`$H$$$&$N$O!"@0?tF1;N$@$1$G$Je(B
e$B$/!“M-M}?tF1;N$G$bM-8z$K5!G=$7$F!”!VM-M}?t$N:GBg8xLs?t!W$N$h$&e(B
e$B$J$b$N$,F@$i$l$k$N$G$7$?!#CN$i$J$+$C$?!#O"J,?tE83+$b7k6I8_=uK!e(B
e$B$@$7!"%f!<%/%j%C%I$N8_=uK!62$k$Y$7!"$@$J$"!#e(B

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

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

Rationale$B$,AH$_9~$_e(B(e$B$^$?$OI8=`E:IUe(B)e$B$K$J$k$s$@$C$?$ie(B, 1/3e$B$,e(B
Rationale$B$N%$%s%9%?%s%9$rI=$7$F$$$k$H<gD%$O$7$d$9$$$G$9$Me(B.
e$B;d$H$7$F$Oe(B, 1/3e$B$HI=<($5$l$F$b$+$^$o$J$$$G$9e(B.

e$B$b$&0l$D:Y$+$$LdBj$,$"$j$^$7$?!#8=:_e(B Rational 1.00 e$B$G$Oe(B

p Rational(3, 1) #=> 3

e$B$H$J$C$F$$$^$9!#e(B3/1 e$B$H$$$&$N$,=9$$$+$i$=$&$7$F$$$k$N$G$9e(B
e$B$,!"$3$l$O$I$&;W$$$^$9!)e(B

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

In message “Re: [ruby-dev:28545] Re: Rational”
on Wed, 12 Apr 2006 02:11:32 +0900, Shin-ichiro HARA
[email protected] writes:

|e$B$b$&0l$D:Y$+$$LdBj$,$“$j$^$7$?!#8=:_e(B Rational 1.00 e$B$G$Oe(B
|
|p Rational(3, 1) #=> 3
|
|e$B$H$J$C$F$$$^$9!#e(B3/1 e$B$H$$$&$N$,=9$$$+$i$=$&$7$F$$$k$N$G$9e(B
|e$B$,!”$3$l$O$I$&;W$$$^$9!)e(B

e$B3NG’$G$9$,!“e(Binspecte$B$N7k2L$,$=$&$G$”$k!“$H$$$&$3$H$G$9$h$M!#e(B
e$B$=$l$O$^$”$$$$$s$8$c$J$$$+$H;W$$$^$9!#e(B

e$B$=$l$O$=$l$H$7$F!"e(BBignume$B$+$i$NN`?d$+$i9M$($k$HJ,Jl$,e(B1e$B$NM-M}e(B
e$B?t$O@0?t$K@55,2=$7$F$7$^$&$H$$$&;EMM$b9M$($i$l$k$H;W$$$^$9!#e(B
e$BAH9~7?$J$s$@$7!#$I$&;W$$$^$9$+!#e(B

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

In [ruby-dev:28546] the message: “[ruby-dev:28546] Re: Rational”, on
Apr/12 02:39(JST) Yukihiro M. writes:

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

|e$B$b$&0l$D:Y$+$$LdBj$,$"$j$^$7$?!#8=:_e(B Rational 1.00 e$B$G$Oe(B
|
|p Rational(3, 1) #=> 3
|
|e$B$H$J$C$F$$$^$9!#e(B3/1 e$B$H$$$&$N$,=9$$$+$i$=$&$7$F$$$k$N$G$9e(B
|e$B$,!"$3$l$O$I$&;W$$$^$9!)e(B

e$B3NG’$G$9$,!“e(Binspecte$B$N7k2L$,$=$&$G$”$k!"$H$$$&$3$H$G$9$h$M!#e(B
e$B$=$l$O$^$"$$$$$s$8$c$J$$$+$H;W$$$^$9!#e(B

e$B;d$OIT2D$@$H;W$$$^$9e(B.
e$B$@$C$Fe(B,e$B$=$l$@$He(B,
Rationale$B$+@0?t$+$o$+$i$J$$$8$c$J$$$G$9$+e(B?
e$B$d$O$je(B,
inspecte$B$O$=$N%/%i%9$,0lL$G$o$+$k$N$,I,?$@$H;W$$$^$9e(B.
e$B$G$J$$$He(B, e$B%G%P%C%/$G$-$^$;$se(B.
e$B$H$*$b$$$^$7$?$,e(B…

e$B$=$l$O$=$l$H$7$F!"e(BBignume$B$+$i$NN`?d$+$i9M$($k$HJ,Jl$,e(B1e$B$NM-M}e(B
e$B?t$O@0?t$K@55,2=$7$F$7$^$&$H$$$&;EMM$b9M$($i$l$k$H;W$$$^$9!#e(B
e$BAH9~7?$J$s$@$7!#$I$&;W$$$^$9$+!#e(B

e$B$H$9$k$J$ie(B, e$BIT2D$G$O$J$$$G$9$,e(B…

e$B$=$&$$$&$3$H$r$$$$$O$8$a$k$He(B

1/3 => 0 e$B$G$J$/e(B 1/3 (=Rational(1,3))

e$B$K$J$C$?J}$,$$$$$s$8$c$J$$$C$FOC$K$J$C$F$7$^$&$N$G$9$,e(B?

e$B:#$Ne(BRubye$B%]%j%7%#$K=>$&$N$J$ie(B,
e$B1i;;$K$h$C$F%/%i%9$,JQ$o$k$N$OHr$1$?$[$&e(B
e$B$,NI$$$N$G$Oe(B?
e$B$=$&$G$b$J$$$J$C$F5$$,$7$F$$$k$J$ie(B,
e$B:#$Ne(Bmathne$B%l%Y%k$^$G9T$/$+$@$H;W$$e(B
e$B$^$9$,e(B?

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

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

In message “Re: [ruby-dev:28547] Re: Rational”
on Wed, 12 Apr 2006 04:02:13 +0900, [email protected]
(e$B@PDM7=<ye(B) writes:

|e$B$@$C$Fe(B,e$B$=$l$@$He(B, Rationale$B$+@0?t$+$o$+$i$J$$$8$c$J$$$G$9$+e(B?
|e$B$d$O$je(B, inspecte$B$O$=$N%/%i%9$,0lL$G$o$+$k$N$,I,?$@$H;W$$$^$9e(B.
|e$B$G$J$$$He(B, e$B%G%P%C%/$G$-$^$;$se(B.

e$B$U$&$`!#e(B

|e$B$=$&$$$&$3$H$r$$$$$O$8$a$k$He(B
|
| 1/3 => 0 e$B$G$J$/e(B 1/3 (=Rational(1,3))
|
|e$B$K$J$C$?J}$,$$$$$s$8$c$J$$$C$FOC$K$J$C$F$7$^$&$N$G$9$,e(B?

e$B$$$d!"JL$K$=$3$^$GOC$r?J$a$kI,A3@-$O$J$$$s$G$9$,!#e(Bw

|e$B:#$Ne(BRubye$B%]%j%7%#$K=>$&$N$J$ie(B, e$B1i;;$K$h$C$F%/%i%9$,JQ$o$k$N$OHr$1$?$[$&e(B
|e$B$,NI$$$N$G$Oe(B?

e$B$(!<$H!"!V1i;;$K$h$C$F%/%i%9$,JQ$o$k%]%j%7!<!W$r;}$C$F$$$k$oe(B
e$B$1$G$O$J$$$G$9!#8=>u!"@0?t$N=|;;$O@0?t$GJD$8$F$$$^$9$,!"$=$le(B
e$B$ONr;KE*7P0^$r4^$`=tHL$N;v>p$K$h$k$b$N$J$N$G!"JL$KJQ99$7$F$Oe(B
e$B$$$1$J$$$H$O;W$C$F$$$^$;$s!#e(BPythone$B$b>-Mhe(BFloate$B$rJV$9$h$&$K$Je(B
e$B$k$=$&$G$9$7!“e(BRubye$B$@$1$,0l@87|L?@0?t$KJD$8$k=|;;1i;;;R$r;}$Ae(B
e$B$D$E$1$kI,MW$b$J$$$G$7$g$&e(B(Perle$B$O:G=i$+$iIbF0>.?tE@$G7W;;$7e(B
e$B$^$9$7e(B)e$B!#$$$:$l$K$7$F$b2f!9$K$Oe(Bdive$B%a%=%C%I$,$”$k$7$M!#e(B

|e$B$=$&$G$b$J$$$J$C$F5$$,$7$F$$$k$J$ie(B, e$B:#$Ne(Bmathne$B%l%Y%k$^$G9T$/$+$@$H;W$$e(B
|e$B$^$9$,e(B?

e$B7+$jJV$7$K$J$j$^$9$,!"$I$3$^$GE0Dl$9$k$+$O5DO@$NM>CO$,$"$k$He(B
e$B;W$$$^$9!#e(Bmathne$B%l%Y%k$^$G9T$/$N$,K\Ev$KNI$$$N$+;d$K$O<+?.$,e(B
e$B$"$j$^$;$s$7!#$?$@!">/$J$/$H$b!">-Mh$K$o$?$C$F$:$C$He(B 1/3 e$B$Ne(B
e$B7k2L$,@0?t$G$J$1$l$P$J$i$J$$$H$$$&%]%j%7!<$r;}$C$F$$$k$o$1$Ge(B
e$B$O$J$$$H$$$&$3$H$,8@$$$?$$$3$H$G$9!#e(B

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

In [ruby-dev:28548] the message: “[ruby-dev:28548] Re: Rational”, on
Apr/12 04:42(JST) Yukihiro M. writes:

|e$B$=$&$$$&$3$H$r$$$$$O$8$a$k$He(B
| 1/3 => 0 e$B$G$J$/e(B 1/3 (=Rational(1,3))
|e$B$K$J$C$?J}$,$$$$$s$8$c$J$$$C$FOC$K$J$C$F$7$^$&$N$G$9$,e(B?

e$B$$$d!"JL$K$=$3$^$GOC$r?J$a$kI,A3@-$O$J$$$s$G$9$,!#e(Bw

e$B$H$$$&$+$G$9$Me(B.

e$BJ,Jl$,e(B1e$B$NM-M}?t$r@0?t$K@55,2=$9$k$@$1$@$He(B.

Rationale$B$N1i;;ESCf$G@0?t$K$J$k$He(B,
e$B$=$N8e@0?t$H$7$F$N1i;;$K$J$k$N$Ge(B,

Rational(1,3)*3/3 => 0

e$B$H$+$K$J$C$F$7$^$$e(B.
Rationale$B%f!<%6!<$K$H$C$F$O$"$^$j$&$l$7$/$J$$$3$H$Ke(B
e$B$J$j$+$M$^$;$se(B.

e$B$G$9$N$Ge(B, e$B$d$k$J$ie(B

|e$B$=$&$G$b$J$$$J$C$F5$$,$7$F$$$k$J$ie(B, e$B:#$Ne(Bmathne$B%l%Y%k$^$G9T$/$+$@$H;W$$e(B
|e$B$^$9$,e(B?

e$B$H$$$&$3$H$K$J$k$H;W$$$^$9e(B.

e$B7+$jJV$7$K$J$j$^$9$,!"$I$3$^$GE0Dl$9$k$+$O5DO@$NM>CO$,$"$k$He(B
e$B;W$$$^$9!#e(Bmathne$B%l%Y%k$^$G9T$/$N$,K\Ev$KNI$$$N$+;d$K$O<+?.$,e(B
e$B$"$j$^$;$s$7!#$?$@!">/$J$/$H$b!">-Mh$K$o$?$C$F$:$C$He(B 1/3 e$B$Ne(B
e$B7k2L$,@0?t$G$J$1$l$P$J$i$J$$$H$$$&%]%j%7!<$r;}$C$F$$$k$o$1$Ge(B
e$B$O$J$$$H$$$&$3$H$,8@$$$?$$$3$H$G$9!#e(B

e$BN;2re(B.

e$B$A$J$_$Ke(B, mathne$B$H$*$J$8?6$kIq$$$r$9$k$N$Oe(B,
Smalltalke$B$He(BCommonLispe$B$G$9$Me(B.

e$B$3$NJU$N?6$kIq$$$N0c$$$Oe(B,
Bignume$B$,AH$9~$$K$J$C$F$$$k$+$I$&$+$G0c$C$Fe(B
e$B$-$F$$$k$H;W$$$^$9$,e(B, e$B$I$&$J$s$G$7$g$&e(B?

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

e$B$U$J$P$G$9!#e(B

e$B$3$l$r$b$&$9$3$70BA4$K$7$F#C$G<BAu$7$?$H$7$F$b7k9=C1=ce(B
e$B$J$N$G!"$=$l$re(B Float#to_r e$B$K$7$F$b$^$:$/$O$J$$$+$J$H$$$&e(B
e$B5$$b$7$F$-$^$7$?!#$&!<$`!#e(B

e$B$?$H$($P!“e(Be=0
e$B$r%G%U%)%k%H$K$9$k!”$H$$$&$3$H$G$b$$$$$+$b$7$l$J$$$G$9$M!#e(B
Common Lisp e$B$Ne(B rationalize e$B$O!“e(Be
e$B$,M?$($i$l$J$$$N$G!”$I$&$7$F$$$k$N$+e(B
e$B$H;W$C$?$s$G$9$,!"e(Bclisp
e$B$N%=!<%9$r$A$g$C$H8+$?$H$3$m$G$O!“85$N2>?t$d;Xe(B
e$B?t$K4p$$$?7W;;$,$”$j$^$9$M!#e(B

Common Lisp e$B$G$O!"e(Binteger-decode-floate$B!"e(BHaskell e$B$G$Oe(B
decodeFloat e$B$,$“e(B
e$B$k$N$G!“0lHL$N%W%m%0%i%^$,e(B rational/rationalize
e$B$N$h$&$J$b$N$r=q$1$k$He(B
e$B;W$$$^$9!#e(Bruby e$B$G$be(B Float#decode
e$B$N$h$&$J$b$N$,$”$C$F$b$$$$$N$+$b$7$le(B
e$B$J$$!”$H;W$$$^$7$?!#e(B

e$B$$$:$l$K$7$F$b!“e(Brationalize
e$BAjEv$O!”$"$l$P$$$$$J!"$/$i$$$@$H;W$&$N$G!"e(B
e$B:#$9$0<BAu$G$-$J$/$F$b$$$$$H;W$$$^$9$,!#e(B

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

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

e$B$G$9$N$Ge(B, e$B$d$k$J$ie(B

|e$B$=$&$G$b$J$$$J$C$F5$$,$7$F$$$k$J$ie(B, e$B:#$Ne(Bmathne$B%l%Y%k$^$G9T$/$+$@$H;W$$e(B
|e$B$^$9$,e(B?

e$B$H$$$&$3$H$K$J$k$H;W$$$^$9e(B.

e$B;d$bF10U8+$G$9!#1i;;8e$K@55,2=$9$k$H$7$?$i!“O"F0$7$Fe(B
e$B@0?te(B/e$B@0?te(B e$B$Ne(B
e$B0UL#$rJQ$($kI,MW$,$”$k$H;W$$$^$9!#e(B

e$B$G$b!"$b$7$=$l$r$d$k$J$i!"BgJQ99$G$9$+$i!“e(B1.9.* e$B$G$O$J$/$Fe(B
Ruby2.0
e$B$G!”$H$$$&$3$H$K$J$j$=$&$G$9$h$M!#e(B

e$B$@$+$i$5$7$"$?$C$F$=$l$OL5$$$H$7$F!“e(BRational(3, 1).inspecte$B$re(B
3/1
e$B$K$9$k$+e(B 3 e$B$K$9$k$+$H$$$&OC$KLa$9$H!”;d$Oe(B 3
e$B$K$7$?$$$J$"!#e(B

e$B@PDM$5$s$Oe(B 3 e$B$,e(B Integer e$B$+e(B Rational
e$B$+6hJL$,$G$-$J$/$J$C$F:$$k$H$$e(B
e$B$&@b$G$9$,!“e(BInteger e$B$,e(B Rational
e$B$K0U?^$;$:JQ2=$7$?$j$9$k$3$H!J$d$=e(B
e$B$N5U!K$OL5$$$N$@$+$i!”%W%m%0%i%^$,e(B 3
e$B$N0UL#$r8m2r$9$k%1!<%9$O>/$J$$e(B
e$B$N$G$O$J$$$G$7$g$&$+!#5U$KNc$($Pe(B Rational
e$B$J@0?t78?t$N9TNs$J$I$re(B p
e$B$G%G%P%C%0Cf$KJ,Jl$Ne(B /1
e$B$,$>$m$>$m=P$F$-$?$i$+$J$jH~$7$/$J$$$H;W$&e(B
e$B$s$G$9$1$I!"$I$&$G$7$g$&!#e(B

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

In [ruby-dev:28551] the message: “[ruby-dev:28551] Re: Rational”, on
Apr/13 01:34(JST) Shin-ichiro HARA writes:

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

e$B$@$+$i$5$7$"$?$C$F$=$l$OL5$$$H$7$F!“e(BRational(3, 1).inspecte$B$re(B 3/1
e$B$K$9$k$+e(B 3 e$B$K$9$k$+$H$$$&OC$KLa$9$H!”;d$Oe(B 3 e$B$K$7$?$$$J$"!#e(B

e$B@PDM$5$s$Oe(B 3 e$B$,e(B Integer e$B$+e(B Rational e$B$+6hJL$,$G$-$J$/$J$C$F:$$k$H$$e(B
e$B$&@b$G$9$,!“e(BInteger e$B$,e(B Rational e$B$K0U?^$;$:JQ2=$7$?$j$9$k$3$H!J$d$=e(B
e$B$N5U!K$OL5$$$N$@$+$i!”%W%m%0%i%^$,e(B 3 e$B$N0UL#$r8m2r$9$k%1!<%9$O>/$J$$e(B
e$B$N$G$O$J$$$G$7$g$&$+!#5U$KNc$($Pe(B Rational e$B$J@0?t78?t$N9TNs$J$I$re(B p
e$B$G%G%P%C%0Cf$KJ,Jl$Ne(B /1 e$B$,$>$m$>$m=P$F$-$?$i$+$J$jH~$7$/$J$$$H;W$&e(B
e$B$s$G$9$1$I!"$I$&$G$7$g$&!#e(B

e$B$$$d!<e(B e$B%G%P%C%/Cf$O2?$,5/$C$F$$$k$+J,$+$i$J$$$G$9$+$i$Me(B.
e$B$d$O$je(B, e$B0lL\e(B
e$B$GJ,$+$C$F$[$7$$$G$9e(B. e$B:GDc8Be(B 3R e$B$H$+e(B
e$B2?$+0u$,$[$7$$$G$9$h$M$'e(B.

e$B$H$O$$$(e(B:

In [ruby-dev:28552] the message: “[ruby-dev:28552] Re: Rational”, on
Apr/13 01:54(JST) Yukihiro M. writes:

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

|e$B$G$b!"$b$7$=$l$r$d$k$J$i!"BgJQ99$G$9$+$i!“e(B1.9.* e$B$G$O$J$/$Fe(B Ruby2.0
|e$B$G!”$H$$$&$3$H$K$J$j$=$&$G$9$h$M!#e(B
1.9e$B$H$$$&$N$Oe(B2.0e$B$N;EMM8!F$HG$G$9$+$iBgJQ99$OK>$`$H$3$m$G$9!#e(B
2.0e$B$G$d$k$H$$$&$3$H$O!"e(B1.9e$B$G$d$k$H$$$&$3$H$G$9!#e(B

e$B$H$$$&$3$H$J$N$G$3$C$A$NOC$7$^$9e(B?

e$B$3$A$i$,7h$^$C$?$ie(B, Rational#inspecte$B$r$I$&$9$k$J$s$Fe(B,
e$B$"$^$j0UL#$J$$$Ge(B
e$B$9$N$Ge(B.

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

e$B$U$J$P$G$9!#e(B

1.9e$B$H$$$&$N$Oe(B2.0e$B$N;EMM8!F$HG$G$9$+$iBgJQ99$OK>$`$H$3$m$G$9!#e(B
2.0e$B$G$d$k$H$$$&$3$H$O!"e(B1.9e$B$G$d$k$H$$$&$3$H$G$9!#e(B

/ e$B$,!"e(Brational e$B$,B8:_$9$k$H$-$Ne(B quo
e$B$HF1$8$h$&$K$J$k$H$&G’<1$G$$$$$N$Ge(B
e$B$7$g$&$+!#e(B

ruby e$B$N3d$j;;7O$O!"e(Bscheme e$B$N8lWC$K$+$J$j6a$$!“e(BCommon lisp
e$B$de(B Haskell
e$B$”$?$j$H$b$=$l$[$I1s$/$J$$$H;W$$$^$9!#e(B

e$B$G$b!“e(Bquotient e$B$,$”$j$^$;$se(B
(e$B$=$7$F>/$7;w$?L>A0$G$<$s$<$s0c$&0UL#$Ne(B
quo
e$B$,$"$j$^$9e(B)e$B!#BN7OE*$K$b!"$=$3$,7j$K$J$C$F$$$k$N$G!"$A$g$C$H$*$+$7e(B
e$B$/$_$($^$9!#e(Bdivmod e$B$N$3$H$r9M$($k$H!"2DG=@-$H$7$F$Oe(B haskell
e$B$N$h$&$K!“e(B
quotrem e$B$b$”$j$($?$H;W$$$^$9!#e(B

e$BJL$KF1$8$K$7$m$H$$$&$o$1$G$O$J$$$N$G$9$,e(B
(e$B$"$k<o$N>o<1$H$$$&$b$N$,$"$ke(B
e$B$J$i$P!"$=$l$r9MN8$7$?$[$&$,$$$$$H$O;W$$$^$9$,e(B)e$B!“8D?ME*$K$O!“e(Bquo
e$B$”$?e(B
e$B$j$,!”$J$s$@$+$9$C$-$j$7$J$$;W$$$,$"$j$^$9!#$b$7!“BgJQ99$9$k$J$i!”$3$Ne(B
e$B$"$?$j$b5DO@$7$F$b$i$($l$P4r$7$$$G$9!#e(B

e$B8D?ME*$K$O!"e(Bquo e$B$O$J$/$7$F!"e(B// e$B$re(B div

e$B$NJLL>$K!"$H;W$C$?$,!"e(B// e$B$G$Oe(B

e$B@55,I=8=$HHo$C$F$7$^$&$N$+!#e(B