読者です 読者をやめる 読者になる 読者になる

コンピュータは割り算が苦手

計算機 Python

浮動小数点数演算では割り算は遅いからやっちゃだめというのは、数値計算の常識ですが、Pythonで実験してみよう。

Python数値計算なんてしねえよ、あるいは速度を考えなきゃならないことをさせないよ、とは思うが、Pythonのが楽なので。

実行時間の計測にはtimeitモジュールを使います。

割り算でやると、

>>> timeit.timeit('1.0/2.0', '')
0.07303404808044434

となります。しかし、同じ答えを出す計算を掛け算に変えると、

>>> timeit.timeit('1.0*0.5', '')
0.03916192054748535

とおよそ半分の時間で計算することができる。

整数演算なら2の累乗の掛け算、割り算ならばシフト演算を使えば早くなることもある。可読性悪くなるし、コンパイラに任せるべきことだから、普通やらないけど。

>>> timeit.timeit('1*8', '')
0.0399320125579834
>>> timeit.timeit('1<<3', '')
0.04148411750793457
>>> timeit.timeit('8/8', '')
0.07842803001403809
>>> timeit.timeit('8>>3', '')
0.03959393501281738

シフト演算と掛け算はPythonだとほとんど変わらないみたい。整数の割り算が遅いのは?ちょっと良くわからない結果になった。

追記

整数除算が遅いのは妥当な結果のようだ。勘違いしていました。
参考