プログラミング言語によって、整数同士の除算(割り算)の「余り」の演算結果が異なることには、数年前に気付いていた。主に、コンパイラ形式のC言語系か、インタプリタ形式のスクリプト言語系かで、全く異なるのだ。
例えば、C言語とGo言語で、
+1 % +3
-1 % +3
+1 % -3
-1 % -3
の計算をすると、結果は
1
-1
1
-1
のようになる。ところが、RubyとPython3で同じ計算をすると、結果は、
1
2
-2
-1
のようになるのだ。
そのことには以前から気付いていたのだが、今回、そもそも整数除算の演算結果すら異なることに気付いた。
具体的には、
+3 / +3
+2 / +3
+1 / +3
+0 / +3
-1 / +3
-2 / +3
-3 / +3
の計算結果は、CとGoでは、
1
0
0
0
0
0
-1
のようになる。ところが、RubyとPython3では、
1
0
0
0
-1
-1
-1
だ。
除数(分母?)を負の数にした、
+3 / -3
+2 / -3
+1 / -3
+0 / -3
-1 / -3
-2 / -3
-3 / -3
の計算結果は、CとGoでは、
-1
0
0
0
0
0
1
RubyとPython3では、
-1
-1
-1
0
0
0
1
だ。
プログラミング歴ウン十年となるのに…、こんなに大きな違いがあるとは考えてもいなかった。参った参った。