Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Randomクラス
クラスの継承リスト: Random < Object < Kernel < BasicObject
MT19937に基づく疑似乱数生成器を提供するクラスです。
オリジナル版 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
new(seed = Random.new_seed) -> Random
[permalink][rdoc]メルセンヌ・ツイスタに基づく疑似乱数発生装置オブジェクトを作ります。 引数が省略された場合は、Random.new_seedの値を使用します。
動作例: 種が同じなら同じ乱数列を発生することができる。
prng = Random.new(1234) [ prng.rand, prng.rand ] #=> [0.1915194503788923, 0.6221087710398319] [ prng.rand(10), prng.rand(1000) ] #=> [4, 664] # 同じ乱数列を発生する。 prng = Random.new(1234) [ prng.rand, prng.rand ] #=> [0.1915194503788923, 0.6221087710398319] [ prng.rand(10), prng.rand(1000) ] #=> [4, 664]
new_seed -> Integer
[permalink][rdoc]適切な乱数の種を返します。
使用例:
p Random.new_seed # => 184271600931914695177248627591520900872
rand -> Float
[permalink][rdoc]rand(max) -> Integer | Float
rand(range) -> Integer | Float | nil
疑似乱数を発生させます。
Random::DEFAULT.rand と同じです。 Random#rand を参照してください。
疑似乱数生成器が Kernel.#rand と共通なため Kernel.#srand などの影響を受けます。
srand 1234 # 乱数の種を設定する。 Random.rand(10.0) #=> 1.9151945037889229 (0.0 以上 10.0 未満の実数) rand(10.0) #=> 6 (rand(10) と同じ)
[SEE_ALSO] Random.srand, Random#rand, Random::DEFAULT
raw_seed(size) -> String
[permalink][rdoc]プラットフォームの提供する機能を使って、文字列を返します。
2017年の時点で、Linuxのmanpage(random(7))には「今日256ビット以上の セキュリティを約束できる暗号化プリミティブが入手可能だとは期待できません」と 書いてあります。そのため、sizeとして32より大きい値を指定することには疑問の 余地があります。
例:
Random.raw_seed(8) #=> "\x78\x41\xBA\xAF\x7D\xEA\xD8\xEA"
srand -> Integer
[permalink][rdoc]srand(number) -> Integer
デフォルトの擬似乱数生成器の種を設定し、古い種を返します。 Kernel.#srand と同じです。
[SEE_ALSO] Kernel.#rand, Random::DEFAULT
self == other -> bool
[permalink][rdoc]乱数生成器が等しい状態であるならばtrue を返します。
動作例:
r1 = Random.new(1) r2 = Random.new(1) p r1 == r2 # => true r2.rand p r1 == r2 # => false r1.rand p r1 == r2 # => true
bytes(size) -> String
[permalink][rdoc]ランダムなバイナリー文字列を返します。結果の文字列のサイズを指定できます。
動作例:
r2 = Random.new(1) p r2.bytes(10) # => "%\xF4\xC1j\xEB\x80G\xFF\x8C/"
rand -> Float
[permalink][rdoc]rand(max) -> Integer | Float
rand(range) -> Integer | Float | nil
一様な疑似乱数を発生させます。
最初の形式では 0.0 以上 1.0 未満の実数を返します。
二番目の形式では 0 以上 max 未満の数を返します。 max が正の整数なら整数を、正の実数なら実数を返します。 0 や負の数を指定することは出来ません。
三番目の形式では range で指定された範囲の値を返します。 range の始端と終端が共に整数の場合は整数を、少なくとも片方が実数の場合は実数を返します。 range に含まれる数が無い場合は nil を返します。 rangeが終端を含まない(つまり ... で生成した場合)には終端の値は乱数の範囲から除かれます。 range.end - range.begin が整数を返す場合は range.begin + self.rand((range.end - range.begin) + e) の値を返します(e は終端を含む場合は1、含まない場合は0です)。 range.end - range.begin が実数を返す場合も同様です。 このため range が Time の場合などにもうまく動作します。
引数が実数でも範囲でもない場合は Object#to_int で変換した値が指定されたものとして扱います。
# Kernel.#rand とほぼ同様の使い勝手 prng = Random.new(1234) prng.rand # => 0.1915194503788923 srand(1234) rand # => 0.1915194503788923 # max に実数も指定出来る prng.rand(6.5) # => 4.043707011758907 # (rand(6) と同等) rand(6.5) # => 5 # 引数には Range も指定できる # 0 から 10までの整数が得られる prng.rand(0..10) # => 4 # 0 から 9までの整数が得られる prng.rand(0...10) # => 8 # 0 から 4.2までの実数が得られる (4.2 が得られる可能性もある) prng.rand(0..4.2) # => 3.2397116600246867 # 0 から 4.2までの実数が得られる (4.2 は除く) prng.rand(0...4.2) # => 3.6148130397862865 # 2012年のすべての(秒単位)時刻から一つ選ばれる prng.rand(Time.new(2012, 1, 1) ... Time.new(2013,1,1)) # => 2012-02-25 03:11:42 +0900 require 'date' prng.rand(Date.new(2012, 1, 1) ... Date.new(2013,1,1)) # => #<Date: 2012-01-31 ((2455958j,0s,0n),+0s,2299161j)> # Kernel.#rand とほぼ同様の使い勝手 prng = Random.new(1234) prng.rand # => 0.1915194503788923 srand(1234) rand # => 0.1915194503788923 # max に実数も指定出来る prng.rand(6.5) # => 4.043707011758907 # (rand(6) と同等) rand(6.5) # => 5 # 引数には Range も指定できる # 0 から 10までの整数が得られる prng.rand(0..10) # => 4 # 0 から 9までの整数が得られる prng.rand(0...10) # => 8 # 0 から 4.2までの実数が得られる (4.2 が得られる可能性もある) prng.rand(0..4.2) # => 3.2397116600246867 # 0 から 4.2までの実数が得られる (4.2 は除く) prng.rand(0...4.2) # => 3.6148130397862865 # 2012年のすべての時刻から一つ選ばれる # Time#- は秒数を float で返すため。 prng.rand(Time.new(2012, 1, 1) ... Time.new(2013,1,1)) # => 2012-02-25 03:11:42 +0900 # DateTime ではうまくいかない。というのは DateTime#- は # Rational を返すため。 # Date#- も Rational を返すが通常は整数を表す Rational オブジェクトを返すためうまくいくように見える # 上と同じ種で再初期化 prng = Random.new(1234) srand(1234) # Kernel.#rand は Array#sample などの影響を受けて値がずれることがある [0, 1].sample prng.rand #=> 0.1915194503788923 rand #=> 0.6221087710398319
[SEE_ALSO] Kernel.#rand
seed -> Integer
[permalink][rdoc]現在の乱数の種を返します。
動作例:
p Random.new(3).seed # => 3
left -> Integer
[permalink][rdoc]C言語レベルで定義されている構造体MTの静的変数default_randの変数leftを参照します。詳しくはrandom.c を参照してください。
state -> Integer
[permalink][rdoc]C言語レベルで定義されている構造体MTの静的変数default_randの状態を参照します。詳しくはrandom.c を参照してください。
left -> Integer
[permalink][rdoc]C言語レベルで定義されている構造体MTの変数leftを参照します。詳しくはrandom.c を参照してください。
marshal_dump -> Array
[permalink][rdoc]Random#marshal_load で復元可能な配列を返します。
動作例:
r1 = Random.new(1) a1 = r1.marshal_dump r2 = Random.new(3) p r1 == r2 # => false r3 = r2.marshal_load(a1) p r1 == r2 # => true p r1 == r3 # => true
marshal_load(array) -> Random
[permalink][rdoc]Random#marshal_dump で得られた配列を基に、Randomオブジェクトを復元します。
動作例:
r1 = Random.new(1) a1 = r1.marshal_dump r2 = Random.new(3) r3 = r2.marshal_load(a1) p r1 == r2 # => true p r1 == r3 # => true
[SEE_ALSO] Random#marshal_dump
state -> Integer
[permalink][rdoc]C言語レベルで定義されている構造体MTの状態を参照します。詳しくはrandom.c を参照してください。
DEFAULT -> Random
[permalink][rdoc]デフォルトの疑似乱数生成器です。 Random.rand や Kernel.#rand などで使用されます。
[SEE_ALSO] Random.srand, Kernel.#srand