CとPythonの割り算の違い

コンピュータは割り算が苦手』の記事で整数の除算演算も乗算・加減算に比べると遅いことを知った。『ハッカーの楽しみ』に普通に書いていた。

整数除算について調べたら、もう一つ非常に基本的なことを知らないことを知った。負の整数を割ったときの値についてである。

Cで-3/2をすると、

ubuntu@ip-172-31-16-86:~$ cat divide.c
#include <stdio.h>

int main(void) {
    printf("%d\n", -3/2);
    return 0;
}
ubuntu@ip-172-31-16-86:~$ gcc divide.c
ubuntu@ip-172-31-16-86:~$ ./a.out
-1

と-1となる。

しかし、Python2.xでは、

ubuntu@ip-172-31-16-86:~$ python -c 'print -3/2'
-2

と-2となる。

割り切れない除算では、Cは0に近づくように丸めるが、Pythonは値が小さくなるように切り捨てるのだった。

ちなみに、Python3.xでは

ubuntu@ip-172-31-16-86:~$ python3 -c 'print(-3/2)'
-1.5
ubuntu@ip-172-31-16-86:~$ python3 -c 'print(-3//2)'
-2

と-3/2で割り切れないと小数になり、整数演算の除算は//を用いる。