『コンピュータは割り算が苦手』の記事で整数の除算演算も乗算・加減算に比べると遅いことを知った。『ハッカーの楽しみ』に普通に書いていた。
整数除算について調べたら、もう一つ非常に基本的なことを知らないことを知った。負の整数を割ったときの値についてである。
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で割り切れないと小数になり、整数演算の除算は//を用いる。