Keep It Simple, Stupid | |
PerlMonks |
Re: How do I get random numbers that follow standard distribution?by grackle (Acolyte) |
on Aug 09, 2000 at 07:41 UTC ( [id://26946]=note: print w/replies, xml ) | Need Help?? |
The question posted asks for a non-module solution,
and an excellent one was provided by lhoward and
tilly. Here is
a solution using a CPAN module.
I looked for Math::Random on CPAN and couldn't find it. There are modules for random numbers, such as Crypt::TrulyRandom, but I believe they will only give you better uniformly distributed random variables (correct me if I'm wrong). For a normal distribution, you can use Math::CDF (Cumulative Distribution Functions). The relevant function is Math::CDF::qnorm(), which will give you what you want when fed a random number x, 0<x<1, with a uniform distribution (i.e., what you get from rand()). (It supposedly returns a value for the inputs x=1 and x=0, but I don't know what those values could be, you'll have to try it). So the function you want is: $myrand = qnorm(rand()); (or replace rand() with your function of choice). One caveat: I don't know how the Math::CDF module calculates these values. If it provides more precision than you need, it could be a big waste of processing time. In that case lhoward and tilly's solution, summing several random variables, works fine. It would be nice to have bounds for the errors, but I can't help you there. Calculate, experiment, or find a reference.... Perhaps this would be a good place to post the results.
In Section
Seekers of Perl Wisdom
|
|