割り算で、割る数と割られる数のどちらかが負である場合、その商と余りは数学的には二通り存在する。
たとえば、-5割る2の場合は、
1) 商が-2で余りが-1の場合 [2x(-2)+(-1)=-5]と
2) 商が-3で余りが 1の場合 [2x(-3)+1=-5]の
二通りである。
プログラムではどっちの結果になるのだろうか。
試しに-5を2で割った余りを表示してみる。
Java | -5 % 2 | -1 |
C | -5 % 2 | -1 |
VB(A) | -5 Mod 2 | -1 |
Ruby | -5 % 2 | 1 |
Perl | -5 % 2 | 1 |
Gauche | (modulo -5 2) | 1 |
どちらかに寄っていると思ったら、言語によって結果が違った。
なにか理由があるのだろうけど、今日は調べる元気がないので寝る。
コメント
コメント一覧 (2件)
おもしろい結果ですね。
ちなみにC#の場合は -1 で、これは
The result of x % y is the value produced by x – (x / y) * y.
という計算式だそうです。
JavaScript(SpiderMonkey)は-1
Pythonは1
Scalaは-1
でしたー。