Mersenne Twisterを使っていたはずだけど、きちんとしたドキュメントを見つけられなかったので、一応、ソースコードを確認。
/* * call-seq: * rand(max=0) => number * * Converts <i>max</i> to an integer using max1 = * max<code>.to_i.abs</code>. If the result is zero, returns a * pseudorandom floating point number greater than or equal to 0.0 and * less than 1.0. Otherwise, returns a pseudorandom integer greater * than or equal to zero and less than max1. <code>Kernel::srand</code> * may be used to ensure repeatable sequences of random numbers between * different runs of the program. Ruby currently uses a modified * Mersenne Twister with a period of 2**19937-1. * * srand 1234 #=> 0 * [ rand, rand ] #=> [0.191519450163469, 0.49766366626136] * [ rand(10), rand(1000) ] #=> [6, 817] * srand 1234 #=> 1234 * [ rand, rand ] #=> [0.191519450163469, 0.49766366626136] */ static VALUE rb_f_rand(argc, argv, obj) int argc; VALUE *argv; VALUE obj; {