正木です。

In message [ruby-math:00528] Re: 5/2 == 2 or 2.5 に
    on 09/08/2001    Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp> writes:



|   % は、除数を法とする簡約(変形)による「標準形」を与える
|   演算である
|
|だとすると、標準形として 1 だったり -1 だったりするのはまず
|い。標準形は一意に決まるのが望ましいので、選ぶとしたら非負
|の 1 でしょう。だから
|
|   5 / 2 == 2
|
|が結論されます。同様に (-5) % 2 == 1 であってほしいので、
|   
|   (-5) / 2 == -3
|
|となるわけです。

b が負の場合についての言及がありませんが、文意から考えて
a = q*b + r, 0 <=  r < |b|
という条件で剰余を決めようという話だと受け取っておきます。
私も剰余に関してはこれが自然だと思います。
ところが Ruby では
p (5.divmod(-2)) => [-3,-1]
となり、この rule を採用していないことがわかります。
これは剰余より q の方を重視して、 q に関して自然な
q=[a/b]   ([] は Gauss の記号)
を採用したものと思われます。
C で
(-5)/2 == -2
となるとすれば、
a/b <0 ならば q=-[-a/b]
という rule だと思います。
要するに誰をも納得させる自然な仕様はないので、設計者の考え方次第と
いうわけです。
こういうものに、他に自然な意味を持つ記号 "/" を使うのは混乱の元です。
Ruby は全体としては大変気に入っていて、他の言語は使う気にならない位
なんですが、納得できない仕様もいくつかあって、これもその一つです。
折角の機会なので、この際 FORTRAN や C の悪しき遺産は捨てて欲しいと
思います。
もっとも Ruby では自分で定義しなおすことができるので個人的には困らな
いんですが、はじめての人は戸惑うと思います。ほかの人に Ruby を勧める
ときに困ります。