Page 1 of 1

php random normal distribution curve

Posted: Sat Feb 27, 2010 11:09 pm
by SmokyBarnable
I need to find a random number +-10% of 2000 which i know how to do with mt_rand but I need it to be a bell curve normal distribution. Any tips on how I can do this?

Re: php random normal distribution curve

Posted: Sat Feb 27, 2010 11:15 pm
by Eran
Check out the comments in the manual -
http://www.php.net/manual/en/function.rand.php#53784

Re: php random normal distribution curve

Posted: Fri Mar 05, 2010 11:28 pm
by SmokyBarnable
Thanks. I'm using these functions and it seems to work well. Why is only one independent variable needed in function gauss()?

Code: Select all

function gauss()
{   // N(0,1)
    // returns random number with normal distribution:
    //   mean=0
    //   std dev=1
   
    // auxilary vars
    $x=random_0_1();
    $y=random_0_1();
   
    // two independent variables with normal distribution N(0,1)
    $u=sqrt(-2*log($x))*cos(2*pi()*$y);
    $v=sqrt(-2*log($x))*sin(2*pi()*$y);
   
    // i will return only one, couse only one needed
    return $u;
}
 
function gauss_ms($m=0.0,$s=1.0)
{   // N(m,s)
    // returns random number with normal distribution:
    //   mean=m
    //   std dev=s
   
    return gauss()*$s+$m;
}
 
function random_0_1()
{   // auxiliary function
    // returns random number with flat distribution from 0 to 1
    return (float)rand()/(float)getrandmax();
}