Ruby randで乱数を発生させる

  • 作成日 2020.12.12
  • 更新日 2022.09.08
  • Ruby
Ruby randで乱数を発生させる

Rubyで、randを使用して、乱数を発生させるサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

rand使い方

randを使用すれば、乱数を発生させることが可能です。

rand(数値)
# 乱数範囲は 0 ~ 数値 - 1 

以下は、乱数を発生させるサンプルコードとなります。

p rand(10)
# 0 ~ 9

p rand(10) + 10
# 10 ~ 19

少数は、小数部は切り捨てられます。

p rand(10.9)
# 0 ~ 9

また、範囲オブジェクトを使用すると、指定した範囲で乱数を生成できます。
同じ結果であれば範囲オブジェクトの場合、少しだけパフォーマンスは下がります。

p rand(1..10)
# 1 ~ 10

p rand(1...10)
# 1 ~ 9

少数を範囲オブジェクトに指定すると、指定した範囲でFloat値でランダムに生成します。

5.times do
    p rand(0.1..0.9)
end

# 0.5044279607193463
# 0.7503245137496386
# 0.7420311659985956
# 0.2400500516117443
# 0.5053949197655653

また、srandで種を設定すると、何度実行しても同じ乱数が生成することが可能です。

# 乱数の種を設定
srand(10)

# 0~999の値を5回出力
5.times do
    p rand(10)
end

# 乱数の種を設定
srand(10)

# 0~999の値を5回出力
5.times do
    p rand(10)
end

<1回目>
# 9
# 4
# 0
# 1
# 9

<2回目>
# 9
# 4
# 0
# 1
# 9

0 以上 1 未満のFloat値がランダムに生成されます。

5.times do
    p rand
    # 1 ~ 10
end

# 0.1273888552565009
# 0.17556682331716011
# 0.6476959664360796
# 0.24685361551232754
# 0.5129696927864187

Randomオブジェクトを使用しても、乱数は発生させることができますが、パフォーマンスが少し下がるため、同じことであればrandを使用した方が良さそうです。

random = Random.new

5.times do
    p random.rand(1..10)
    # 1 ~ 10
end

# 9
# 4
# 5
# 9
# 10

【参考】 randとrandom.randを1000万回実行した結果

                 user     system      total        real
#rand(10)    1.437000   0.000000   1.437000 (  1.428762)
#random.rand(0..9)  2.109000   0.000000   2.109000 (  2.100042)