mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-18 10:01:57 -05:00
35 lines
718 B
C
35 lines
718 B
C
#include <stdlib.h>
|
|
#include <math.h>
|
|
|
|
/* Generate gaussian random float with mean=0 and std_dev=1 */
|
|
float gran_()
|
|
{
|
|
float fac,rsq,v1,v2;
|
|
static float gset;
|
|
static int iset;
|
|
|
|
if(iset){
|
|
/* Already got one */
|
|
iset = 0;
|
|
return gset;
|
|
}
|
|
/* Generate two evenly distributed numbers between -1 and +1
|
|
* that are inside the unit circle
|
|
*/
|
|
do {
|
|
v1 = 2.0 * (float)rand() / RAND_MAX - 1;
|
|
v2 = 2.0 * (float)rand() / RAND_MAX - 1;
|
|
rsq = v1*v1 + v2*v2;
|
|
} while(rsq >= 1.0 || rsq == 0.0);
|
|
fac = sqrt(-2.0*log(rsq)/rsq);
|
|
gset = v1*fac;
|
|
iset++;
|
|
return v2*fac;
|
|
}
|
|
|
|
/* Generates evenly distributed numbers between 0 and 1. */
|
|
float rran_()
|
|
{
|
|
return (float)rand()/(float)RAND_MAX;
|
|
}
|