負数の割り算がおかしい

今日職場で使っていて気づいたんだけど、Rubyだけおかしくない?
1.8系も1.9系も同じ結果。
これってRubyの常識?

$ irb
irb(main):001:0> 100/-9
=> -12
irb(main):002:0> 100%-9
=> -8
irb(main):003:0> -100/9
=> -12
irb(main):004:0> -100%9
=> 8

いくらなんでも余りが8はおかしいような。


ちなみにScheme

$ gosh
gosh> (quotient 100 -9)
 -11
gosh> (remainder 100 -9)
1
gosh> (quotient -100 9)
 -11
gosh> (remainder -100 9)
 -1


ついでにCでも

$ cat test.c
#include <stdio.h>

int main(void){

	printf("%d %d\n", 100/-9, 100%-9);
	printf("%d %d\n", -100/9, -100%9);

	return 0;
}
$ ./test 
 -11 1
 -11 -1


CとScheme(Gauche)は結果が同じ。
Rubyだけ違う。RubyはCで書かれているから計算結果はCと同じと思っていたのに。


風邪でしんどいから今日はここまで。


追記:
だれか理由を知っている人がいたら教えてください。

追記2:
1.9のnumeric.cより。


これが割り算を行う実際の関数らしい。

static void
flodivmod(double x, double y, double *divp, double *modp)
{
	double div, mod;

#ifdef HAVE_FMOD
	mod = fmod(x, y);
#else
	{
		double z;

		modf(x/y, &z);
		mod = x - z * y;
	}
#endif
	div = (x - mod) / y;
	if (y*mod < 0) {
		mod += y;
		div -= 1.0;
	}
	if (modp) *modp = mod;
	if (divp) *divp = div;
}


この中の

	if (y*mod < 0) {
		mod += y;
		div -= 1.0;
	}

が該当部分なんだけど、普通に計算すれば良いものを意図的に計算結果を変えている。
理由は不明。