Cogito Ergo Sum.

我思う故に我あり

商と余り

 プログラミング言語によって、整数同士の除算(割り算)の「余り」の演算結果が異なることには、数年前に気付いていた。主に、コンパイラ形式の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

だ。

 プログラミング歴ウン十年となるのに…、こんなに大きな違いがあるとは考えてもいなかった。参った参った。