0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonの冪乗の速度について

Posted at

1. 概要

MD(分子動力学)の記事を書いているときにふと気になったので調べました。
以下の5通りで戦います。

  • a * a * a * ・・・
  • a_2 = a * a, a_4 = a_2 * a_2 ・・・
  • a ** b
  • pow(a, b)
  • np.power(a, b)

2. 条件

  • 1回のループ内で定数aを10乗させる処理を行います。
  • ループ回数は100万回です。計測にはtimeモジュールを使います。
  • 各条件の処理は以下の通りです。
for _ in range(num_loop):
    x = a * a * a * a * a * a * a * a * a * a

for _ in range(num_loop):
    x_2 = a * a
    x_4 = x_2 * x_2
    x_10 = x_4 * x_4 * x_2

for _ in range(num_loop):
    x = a ** 10

for _ in range(num_loop):
    x = pow(a, 10)

for _ in range(num_loop):
    x = np.power(a, 10)

3. 結果

3-1. a = 1

a * a * a * ・・・ : 0.1461648941040039
a_2 = a * a ・・・ : 0.08412599563598633 優勝!
a ** b            : 0.24338006973266602
pow(a, b)         : 0.26867198944091797
np.power(a, b)    : 0.9174587726593018

3-2. a = 1e10

a * a * a * ・・・ : 0.14845013618469238
a_2 = a * a ・・・ : 0.0875389575958252
a ** b            : 0.07700586318969727 優勝!
pow(a, b)         : 0.10171699523925781
np.power(a, b)    : 1.22843599319458

3-3. a = 1e-10

a * a * a * ・・・ : 0.14542508125305176
a_2 = a * a ・・・ : 0.08142709732055664
a ** b            : 0.06892800331115723 優勝!
pow(a, b)         : 0.10165691375732422
np.power(a, b)    : 1.2617030143737793

4. 考察

pythonの内部処理がどうなっているかさっぱりなので検証方法もざっくりです。
有識者の方は是非コメントいただけると嬉しいです:bow_tone1:
私は脳死で**を使おうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?