剰余

多くのプログラミング言語では、aをbで割ったときの余りを求めるときに % という演算子を使って、a%b と書く。例えば、17%5は2で20%5は0になる。


ただ、負の数を割った際の余りについては、言語によって結果が異なっていて「A:負の値をとるもの(絶対値の剰余に-1を掛けた値)」「B:正の値をとるもの(Aの結果が0ではない場合は、Aの結果に割る数を加えた値)」。先ほどの例で言うと、Aでは -17%5 が -2 になり、Bでは3になる。Bがちょっと解りにくいかもしれないが、グラフにするとこんな感じだ。
Aの場合 (y=x%5)


Bの場合 (y=x%5)


個人的には剰余は常に正の数の方がありがたいのでBであって欲しいのだが(有限群論的にもB)、ざっと見てみたところ、C++, actionscript, javascript はAで、perlはBとなっていた。調べていないがjavaはAのような気がする。python, ruby, phpはどうなんだろう。

追記
pythonはB組だった。2行だけだが初めてpythonで書いた。

for i in range(-7, 8):
print i, "% 5 =", i%5

-7 % 5 = 3
-6 % 5 = 4
-5 % 5 = 0
-4 % 5 = 1
-3 % 5 = 2
-2 % 5 = 3
-1 % 5 = 4
0 % 5 = 0
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
6 % 5 = 1
7 % 5 = 2

更に追記
Javaも試してみた。予想通りA組だった。