|more useful options|
Answer: How do I get random numbers that follow standard distribution?by grackle (Acolyte)
|on Aug 09, 2000 at 07:41 UTC||Need Help??|
Q&A > math > How do I get random numbers that follow standard distribution? - Answer contributed by grackle
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.