Ruby 0~9までの乱数を発生させる「rand」と「random.rand」のパフォーマンスを計測する

Ruby 0~9までの乱数を発生させる「rand」と「random.rand」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、0~9までの乱数を発生させる「rand」と「random.rand」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、「rand」と「範囲オブジェクトを使ったrand」「random.rand」を使用して、0~9までの乱数を発生させるコードを1000万回実行したパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

# 繰り返し回数 1000万回
i = 10000000

# オブジェクトを事前に生成
random = Random.new

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|

  r.report '#rand(10)' do
    i.times do
      rand(10)
    end
  end

  r.report '#rand(0..9)' do
    i.times do
      rand(0..9)
    end
  end

  r.report '#random.rand(0..9)' do
    i.times do
      random.rand(0..9)
    end
  end

end

実行結果

<1回目>
                 user     system      total        real
#rand(10)    1.359000   0.000000   1.359000 (  1.357292)
#rand(0..9)  1.750000   0.000000   1.750000 (  1.992362)
#random.rand(0..9)  2.391000   0.015000   2.406000 (  2.505658)

<2回目>
                 user     system      total        real
#rand(10)    1.375000   0.000000   1.375000 (  1.405977)
#rand(0..9)  1.500000   0.000000   1.500000 (  1.493190)
#random.rand(0..9)  2.375000   0.016000   2.391000 (  2.555527)

<3回目>
                 user     system      total        real
#rand(10)    1.703000   0.000000   1.703000 (  1.978642)
#rand(0..9)  1.594000   0.000000   1.594000 (  1.625010)
#random.rand(0..9)  2.110000   0.000000   2.110000 (  2.113010)

「rand(10)」が、一番パフォーマンスは良さそうです。