From da1a91424f1c2b6a0bfdff6d90cd5960039bfa44 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 28 Aug 2012 15:06:01 +0000 Subject: [PATCH] Add the gaussian random number generator. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2533 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- libm65/gran.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 libm65/gran.c diff --git a/libm65/gran.c b/libm65/gran.c new file mode 100644 index 000000000..ceeb6da7d --- /dev/null +++ b/libm65/gran.c @@ -0,0 +1,28 @@ +#include +#include + +/* 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; +}