math.sqrt() を用いて√2の計算を行います。ここで、math.sqrt() へ渡す引数として以下の3パターン用意し、それぞれの処理速度を比較します。
- math.sqrt(2)
- math.sqrt(2.0)
- math.sqrt(float(2))
ベンチマークのソースコードです。
from benchmarker import Benchmarker import math with Benchmarker(1000000, cycle=3, extra=1) as bench: @bench("int") def _(bm): for _ in bm: math.sqrt(2) @bench("float") def _(bm): for _ in bm: math.sqrt(2.0) @bench("cast") def _(bm): for _ in bm: math.sqrt(float(2))計測結果です。
## 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 float 0.8217 (100.0) ******************** int 1.4161 ( 58.0) ************ cast 2.2811 ( 36.0) *******
計測結果からは以下のことが言えます。
- float を渡す方が、int を渡すよりも高速
- 渡す前に自力で float に変換するのは全くの逆効果
この傾向は math.sqrt() に限らず、mathライブラリの多くの関数に当てはまります。
リテラル値を math の関数へ渡す際には、たとえ整数値であっても、math.sqrt(2) ではなく math.sqrt(2.0) のように float で渡す方が高速になるようです。本当にちょっとしたことですけどね。
0 件のコメント:
コメントを投稿