Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > 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
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/"
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
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 を参照してください。
state -> Integer
[permalink][rdoc]C言語レベルで定義されている構造体MTの状態を参照します。詳しくはrandom.c を参照してください。
DEFAULT -> Random
[permalink][rdoc]デフォルトの疑似乱数生成器です。 Random.rand や Kernel.#rand などで使用されます。
[SEE_ALSO] Random.srand, Kernel.#srand