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