原です。

> > 5/2 = 2
> > は数学的にはどう考えても不自然です。
> > これは、仮に自然数の class があったとして、演算を class 内で閉じさせるために
> > 2-5=3
> > とするのと同じ程度に無理があります。

確かに 5 / 2 を「2 をかけると 5 になる数を求める演算である」と
決めつけるとそうかもしれないんですが、これが自然であるという考
え方もあります。ちょっと説明すると、、、

和、差、積が定義されている集合を「環」といいますよね。で、商も
定義されると「体」と呼ばれるわけですけど、環の中には体にどのぐ
らい近いかという条件によって、いろんな名称のものがあります。そ
の中のポピュラーなものの一つに「ユークリッド整域」とよばれるも
のがあります。簡単に言うとこれは、2つの要素の間に整除とよばれ
る除法が定義されている環の事です。つまり、現在の Integer#/ と 
Integer#% にあたる「商」と「剰余」が定義された環の事です。有理
数係数の多項式なんかもユークリッド整域です。(詳しい定義は最後
に。)ユークリッド整域は、素因子分解ができたり、いろいろ便利な
事があって、数学上では有用な概念です。

で、有理数体で代表される体は、整除による剰余が常に 0 になる特
殊なユークリッド整域であると捉える事ができます。そういう意味で
は、Rational における 5 / 2 == 5/2 は、Integer における 5 / 2 
== 2 の自然な拡張、というか、特殊化と言えるわけです。

特に有理数体は整数環からつくった「商体」と呼ばれるもので、これ
は割り切れないものを無理矢理割り切れたと考えた、不自然な人工物
だと言えなくもない。つまり 5 / 2 == 2 の方が先にあって、5分の2
というのは、人間が屁理屈をつけて勝手に作った想像上の数である、
というわけです。実際、コンピュータ上の実装も難しいし。


>中尾です。

>Common LISPなら、
>    (floor 5 2) ===> 2        ----- (1)
>    (/ 5 2)     ===> 5/2      ----- (2)
>となります。
>(1)と(2)の演算は別物であり、どちらも有用なので、別のメソッドにする方が
>自然であり合理的だと思います。

Common LISP って floor が割り算を表す演算なんですねえ。それで気
がついたんですけど、現在の 5 / 2 == 2 というのは、なにか勝手に
指定もしないのに floor を取られている気がするのかもしれません。

上に書いたように、これはある意味 floor とは無関係で、実は整除の
商の一つなのだ、というイメージを持つと 5 / 2 == 2 は不自然と感じ
なくなるのかもしれません。例えば、多項式で考えるなら、x**2+x+1 
を x+1で割った商は x ですが、これは floor とは無関係であるのは明
らかです。

ただし、多項式環ではない一般のユークリッド整域における商は一意に
決まるとは限らないので(例えばごとけんさんの言った (-5)/2 は -3 
か -2 かという問題)、/ という記号を使うのは多少気が引けるという
のはあるので、これもいろいろな考え方のうちの一つにすぎないのは確
かです。

----------------------------------------------------
[ユークリッド整域の定義]
次の2つの性質をもつ環 R をユークリッド整域という。
(1)R の 0 でない2つの要素の積は 0 でない。
(2)R - {0} から 0 以上の整数への関数 N() が存在して次を満たす。
      (i) 任意の 0 でない a, b について、N(a*b) >= N(a)
      (ii) 任意の a と 0 でない b についてある q, r が存在して
            a = q * b + r,  r == 0 または N(r) < N(b)

[ユークリッド整域の例]
(1) 整数全体。N(x) = |x|
(2) 有理数係数の多項式全体。N(f) = deg(f)
(3) 実数部分 x と虚数部分 y が整数である複素数全体。
     N(x + yi) = Sqrt(x**2+y**2)
(4) 有理数。N(x) = |x|