2015年11月13日

ベンチマーク4 pow

累乗演算について、ベンチマークを計測します。


標準のPythonでは、累乗を行う操作が3つ用意されています。それぞれの計算に掛かる時間を比較します。

  1. ** 演算子
  2. pow()
  3. math.pow()

ベンチマークのソースコードです。
from benchmarker import Benchmarker
import math

with Benchmarker(1000000, cycle=3, extra=1) as bench:

    @bench("** operator")
    def _(bm):
        for _ in bm:
            3.14 ** 2.5

    @bench("pow")
    def _(bm):
        for _ in bm:
            pow(3.14, 2.5)

    @bench("math.pow")
    def _(bm):
        for _ in bm:
            math.pow(3.14, 2.5)
計測結果です。
## benchmarker:         release 4.0.1 (for python)
## python version:      3.4.0
## python compiler:     MSC v.1600 32 bit (Intel)
## python platform:     Windows-8-6.2.9200
...

## Ranking        real
** operator     0.1615  (100.0) ********************
pow             1.0156  ( 15.9) ***
math.pow        1.1458  ( 14.1) ***

ご覧の通り計測結果からは「**演算子が圧倒的に速い!」と言えます。ここまで差がつくとは正直驚きです。
(math.pow() はフルパスで呼ばないようにすればもう少し高速になります。それでも、**演算子の速さには全く敵いません。)

累乗演算には、**演算子を使うのが良いようです。

0 件のコメント:

コメントを投稿