Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
"be consistent"
 
PerlMonks  

Re: How do I get random numbers that follow standard distribution?

by grackle (Acolyte)
on Aug 09, 2000 at 03:41 UTC ( [id://26946]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to How do I get random numbers that follow standard distribution?

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.

  • Comment on Re: How do I get random numbers that follow standard distribution?

Replies are listed 'Best First'.
Erratum
by grackle (Acolyte) on Aug 09, 2000 at 03:46 UTC
    The following sentence was truncated due to author error:

    The relevant function is Math::CDF::qnorm(), which will give you what you want when fed a random number x, 0 < x < 1.

    My apologies.

    All exact science is dominated by the idea of approximation.
    -- Bertrand Russell

RE: Answer: How do I get random numbers that follow standard distribution?
by tilly (Archbishop) on Aug 10, 2000 at 11:55 UTC
    You misunderstood one thing. The point of Math::TrulyRandom is not to have a more accurate distribution, it is to have a random number that is not guessable. Normal random numbers are guessable based on the time your program runs.

    If the random numbers are used for any cryptographic purpose this is an important consideration.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://26946]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.