3
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 3 years have passed since last update.

Ruby で浮動小数点数の整数乗をするマイクロベンチマーク

Last updated at Posted at 2020-10-08

これはなに?

Ruby 3.0 で x ** 2 が速くなった件 を読んで、マイクロベンチマークしたくなったのでマイクロベンチマークした。

実用性とかそういう視点には立っていない。

測定対象とか

ruby は、2.7.2 と 3.0.0-preview1。
環境は macOS Catalina 10.15.6。2.2 GHz クアッドコアIntel Core i7。

何を測るか

例えば x の 11乗を計算するとして。
以下のような方法がある。

名前 計算方法
x**n x**11
x*x*...*x x*x*x*x*x*x*x*x*x*x*x
use variables z=x*x;y=x*z*z;x*y*y
use '**2' ((x**2)**2*x)**2*x

最初の2つはいいとして。
use variables は、掛け算の回数を減らす努力をまあまあした感じの計算をする。
全力で減らす努力をしたわけではないので、例えば 27 の場合は「z=x*x*x;y=z*z;z=x*y*y;x*z*z」の7回になっている。
全力だとたぶん「z=x*x*x;y=z*z*z;y*y*y」の6回になるんだけど、まあサボった。

最後のは、**2 をたくさん使って計算する。

x は 3.0 にした。
指数は 2〜32 を試した。
指数の値が小さいと、 x**nuse '**2' は同じだし、 x*x*...*xuse variables も同じだったりする。

結果

グラフはいずれも Iteration per second なので、上が速い。
片対数グラフ注意。

image.png

10乗ぐらいまでは use variables が速そう。
16乗ぐらいまでは use variablesx**n が抜きつ抜かれつ。
それ以上は x**n が速い。

グラフを見ると、 x**3x**4 ぐらいまでは特別扱いしたほうが良さげに見えるけど、どうだろう。

image.png

x**n を見ると、 3.0.0-preview1 で **2 を特別扱いしている感じがよく分かる。

3
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
3
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?