原です。

>ごとけんです

>確かに 17 と 17 が同じというのはすごいことですね。

なんか分からないけど、すごいといえばすごくすごい。

> > 他にもいろんな種類の量があるけど、なぜか数学やコンピュータ
> > 上では、比として有理数を実装せざるを得ず、加法などの操作や
> > 等号の定義が、かなり複雑にならざるを得ない。
>
>実装の問題に帰着されると言語としての問題とだいぶ違うので、そ
>んなに肩を持てません。

実装の問題と言語の問題がからんでいるから、ややこしいんではな
いですか?

遊びになってしまうかもしれないけど、実装の問題を全く考えなか
ったらどうなるか、と思考実験するとどうなる?あるいは、ハード
ウェア的に有理数が整数と同じコストで処理されるとしたら。

そうしたら、まず 1 と書いたら即有理数でしょうね。整数というク
ラスは無くて良い。そして敢えて Integer を作るとしたら、それこ
そ Integer.new(5) / Integer.new(2) は Integer.new(2) に等しく
するのではないか。


>ただ高価な操作があんまり利用しやすくなっ
>ているのもよくないので要はどれくらい使われるかですかね。僕は 
>-2/5 のびっくりを考えると Integer#/ 自体がそうそう使われるも
>のでもないと思うし、有理数ならすぐに動作がガッテンできるので
>なかなか良いと考えています。

ごとけんさんは、-5/2 が -3 になるのにびっくりするみたいです
ね。。C と食い違うということと、ちょっと数学的な動きであるこ
とにびっくりするんでしょうか。私はこれでいいと思うなあ。

> > そこで「5 個卵があるが、オムレツ焼くのに一皿 2 個必要だとす
> > ると、何皿作れる?」みたいな素朴な演算に Integer#/ を当てる
> > のは、まずまず自然なことではないかと思うのです。
>
>それは例が良くないかも。だって、「パンツは3日までは履いても
>可だが、1週間の旅行でパンツは何枚必要?」みたいなよくある演算
>に Integer#/ を素朴に用いることができないんですもの。という
>かこの手の問題はやっぱり頭を使うのが必要で Integer#/ ではで
>きないから小学校の頃から苦手です。

ああそれは私も同じ。そういうの極端に苦手。最近は毎日取り替え
るんで問題は少なくなりましたが。:-)


多少話がずれるんだけど、-5/2 は -3 でいいんだという説を書いて
おきます。

整数同士の商をユークリッド整域の整除の商と解釈した場合(この
説自体多くの支持を得てはいないが)5 / 2 では余りの絶対値が 2 
より小さければいいので、5 / 2 == 2 でも 5 / 2 == 3 でもどっ
ちでもいいです。これは数学プロパーの問題だというわけではなく、
これこそ上のパンツ問題の本質だと思う。

しかし、どちらでもいいがどちらかではある。ではどっちか一方に
決めるとしたらどっちか?

そこで今度は余りの % に話を移します。整除では

   被除数  = 商 * 除数 + 剰余

という等式を守りたいので、

   5 / 2 == 2 なら 5 % 2 == 1
   5 / 2 == 3 なら 5 % 2 == -1

と決めた方がいい。そこで次のように % を意味づけします。

   % は、除数を法とする簡約(変形)による「標準形」を与える
   演算である

だとすると、標準形として 1 だったり -1 だったりするのはまず
い。標準形は一意に決まるのが望ましいので、選ぶとしたら非負
の 1 でしょう。だから

   5 / 2 == 2

が結論されます。同様に (-5) % 2 == 1 であってほしいので、
   
   (-5) / 2 == -3

となるわけです。

まあ「代表元」という言葉の代わりに「標準形」という言葉を使っ
ただけですが、これは計算数学的な発想から受け入れやすいものだ
と思います。

あえて C と袂を分かった Ruby の決断は正解だったと思います。