x
Solved

# Gaussian distributed pseudorandom number generator

Posted on 2010-08-30
Medium Priority
565 Views
Suppose X is a uniform random variable in the interval [0,1), how do I transform it so as to form a Gaussian distribution?

Thanks
0
Question by:InteractiveMind

LVL 74

Assisted Solution

sdstuber earned 200 total points
ID: 33561993
easiest way is to probably to sum groups of the random  numbers.  The central limit theorem dictates the sums should be a normal distribution
0

LVL 33

Accepted Solution

phoffric earned 800 total points
ID: 33561994
0

LVL 2

Assisted Solution

wslb earned 200 total points
ID: 33569444
As phoffric (give him most of the credit) says, http://www.bearcave.com/misl/misl_tech/wavelets/hurst/random.html
But here are the details you want:
You call your random number X, int he code below, each call to randf() returns another pseudorandom number.  If you're not used to c programming, note the the point of the

do {...} while while ( w >= 1.0 );

part is to keep trying the {..} portion until you get a w<1.  Once you have x1 and x2 that result in w<1, then you use them to calculate the Gaussina-distributed pseudorandom number y1.
``````  // from http://www.taygeta.com/random/gaussian.html
// Algorithm by Dr. Everett (Skip) Carter, Jr.

float x1, x2, w, y1, y2;

do {
x1 = 2.0 * ranf() - 1.0;
x2 = 2.0 * ranf() - 1.0;
w = x1 * x1 + x2 * x2;
} while ( w >= 1.0 );

w = sqrt( (-2.0 * ln( w ) ) / w );
y1 = x1 * w;
``````
0

LVL 4

Assisted Solution

boocko earned 800 total points
ID: 33584092
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.