正木です。

|[ruby-math:00701] Re: int/int [Re: compl
|From: Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp>

|これって、
|
|   1 == Rational(1)
|
|なのに、
|
|   1 / 2 != Rational(1) / 2
|
|なのは変じゃないかってことですよね。

正確にいうと、 int/int -> int の立場を取れば、当然
p   1 == Rational(1) #=> false
p   1 == 1.0 #=> false
とするべきなので、[ruby-math:00693] での最後の発言は意外でした。
自然数の 1 と有理数の 1 と実数の 1 は違うものだと考えること自体は
それほどおかしなことではないので、上の値(false)も絶対に変だとは思いません。
そういう立場も有り得ると思います。
ただ私には programing 言語でそういう方式を採用するのは、得策とは思えません。
非常に使いにくいものになると思います。

Float に関しては、int/int -> Rational としても現状の
p   1 == 1.0 #=> true
と完全に整合性がとれるわけではありません。
例えば[ruby-math:00561]で書いた通り
p ((1/49)*49==(1.0/49)*49) #=> false

これは Float が本当の数ではないからなので、有理数の場合とは別次元の
話です。