I need a random number generator that generates random numbers with a
uniform distribution.
I am not sure what rand does in ruby and I can't seem to find it online
either. My initial assumption is that it follows a uniform distribution, but
I can't tell.
Any ideas?
According to the source code for random.c, Ruby's implementation of
rand uses the Mersenne Twister MT19937 which according to:
Mersenne Twister - Wikipedia has "a very high order
of dimensional equidistribution."
HTH
···
On 5/22/07, Roland Mai <roland.mai@gmail.com> wrote:
I need a random number generator that generates random numbers with a
uniform distribution.
I am not sure what rand does in ruby and I can't seem to find it online
either. My initial assumption is that it follows a uniform distribution, but
I can't tell.
Any ideas?
--
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/
Roland Mai wrote:
I need a random number generator that generates random numbers with a
uniform distribution.
I am not sure what rand does in ruby and I can't seem to find it online
either. My initial assumption is that it follows a uniform distribution, but
I can't tell.
Any ideas?
Well, I would think that by definition it has a uniform distribution. Can you give an example of a RNG that does not have a uniform distribution?
Roland Mai wrote:
I need a random number generator that generates random numbers with a
uniform distribution.
I am not sure what rand does in ruby and I can't seem to find it online
either. My initial assumption is that it follows a uniform distribution, but
I can't tell.
Any ideas?
Yes, rand() is uniform in the interval 0 <= x < 1. It's based on MT19937.
If you have a working ri installation, then you can read about it this way:
$ ri Kernel#rand | cat
------------------------------------------------------------ Kernel#rand
rand(max=0) => number
···
------------------------------------------------------------------------
Converts max to an integer using max1 = max.to_i.abs. 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. Kernel::srand 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
219937-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]
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
Dan Zwell wrote:
Roland Mai wrote:
I need a random number generator that generates random numbers with a
uniform distribution.
I am not sure what rand does in ruby and I can't seem to find it online
either. My initial assumption is that it follows a uniform distribution, but
I can't tell.
Any ideas?
Well, I would think that by definition it has a uniform distribution. Can you give an example of a RNG that does not have a uniform distribution?
An RNG defined such that its output is the average of the outputs of N independent uniform RNG's will, if my very, very shaky memory of first year undergrad maths can be relied upon, have a Gaussian distribution. That's the simplest I can think of...
···
--
Alex
Dan Zwell wrote:
Well, I would think that by definition it has a uniform distribution. Can you give an example of a RNG that does not have a uniform distribution?
The stat software I use has RNGs for the Bernoulli, beta, binomial, Cauchy, chi-square, Erlang, exponential, F, gamma, geometric, hypergeometric, lognormal, negative binomial, normal, poisson, T, tabled, triangular, and Weibull distributions, as well as uniform.
···
--
RMagick [http://rmagick.rubyforge.org]
RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html\]
You can use uniform random numbers generated from the GNU Scientific
library, via ruby-gsl,
http://rb-gsl.rubyforge.org/,
see : http://rb-gsl.rubyforge.org/rng.html,
if you should want random numbers that follow some other distribution,
you can always pick a random number in the interval [0,1] and then
numerically find the position at which the cumulative distribution
reaches this value. Do this many times .. this gives you a distribution
of points according to the distribution you're looking for.
You don't have to program it all by yourself, but you can use
the statistics2 package by Shin-ichiro Hara: see the readme here:
http://blade.nagaokaut.ac.jp/~sinara/ruby/math/statistics2/statistics2-0.50/README
Best regards,
Axel
···
--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kanns mit allen: http://www.gmx.net/de/go/multimessenger
Tim Hunter wrote:
Dan Zwell wrote:
Well, I would think that by definition it has a uniform distribution. Can you give an example of a RNG that does not have a uniform distribution?
The stat software I use has RNGs for the Bernoulli, beta, binomial, Cauchy, chi-square, Erlang, exponential, F, gamma, geometric, hypergeometric, lognormal, negative binomial, normal, poisson, T, tabled, triangular, and Weibull distributions, as well as uniform.
I guess that was a pretty dumb question. But I'm glad I asked it, as I have never pondered RNGs that aren't uniform. I'll probably learn about the algorithms that generate these other distributions if I ever have time.
You guys are great. Thanks a lot.
···
On 5/22/07, Axel Etzold <AEtzold@gmx.de> wrote:
You can use uniform random numbers generated from the GNU Scientific
library, via ruby-gsl,
http://rb-gsl.rubyforge.org/,
see : http://rb-gsl.rubyforge.org/rng.html,
if you should want random numbers that follow some other distribution,
you can always pick a random number in the interval [0,1] and then
numerically find the position at which the cumulative distribution
reaches this value. Do this many times .. this gives you a distribution
of points according to the distribution you're looking for.
You don't have to program it all by yourself, but you can use
the statistics2 package by Shin-ichiro Hara: see the readme here:
http://blade.nagaokaut.ac.jp/~sinara/ruby/math/statistics2/statistics2-0.50/README
Best regards,
Axel
--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kanns mit allen: http://www.gmx.net/de/go/multimessenger
Most of these are based on a uniform RNG. They either apply a function
to one or more numbers generated by a uniform random number generator.
Or they use a series of uniform RNs to do a mini-simulation and in the
process generate the required result.
···
On 5/23/07, Dan Zwell <dzwell@gmail.com> wrote:
I guess that was a pretty dumb question. But I'm glad I asked it, as I
have never pondered RNGs that aren't uniform. I'll probably learn about
the algorithms that generate these other distributions if I ever have time.
--
Rick DeNatale
My blog on Ruby
http://talklikeaduck.denhaven2.com/