Re: Generating Random Numbers with Normal Distribution
| From: | Nathan Nobbe | Date: | Mon, 10 Dec 2007 19:32:54 +0000 |
| Subject: | Re: Generating Random Numbers with Normal Distribution | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-265616@lists.php.net to get a copy of this message | ||
On Dec 10, 2007 2:28 PM, AmirBehzad Eslami <behzad.eslami@gmail.com> wrote:
> Dear list,
>
> For some computer-based simulation, i need to
> generate random numbers that have a normal distribution.
>
> It seems that PHP's rand() and mt_rand() functions return
> uniformly distributed numbers which is not suitable for
> simulation purposes.
>
> Is there any way to generate random numbers with
> normal distribution in PHP?
>
this is straight from a comment on the rand() documentation:
http://us3.php.net/rand
-nathan
Random numbers with Gauss distribution (normal distribution).
A correct alghoritm. Without aproximations, like Smaaps'
It is specially usefull for simulations in physics.
Check yourself, and have a fun.
<?php
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();
}
?>
JanS
student of astronomy
on Warsaw University