```
/*************************************************************************
*  Author:       Kevin Wayne
*  Date:         8/20/04
*  Compilation:  javac StdGaussian.java
*  Execution:    java StdGaussian
*
*  Computes a standard Gaussian random deviate using the cartesian
*  form of the Box-Muller transform. The method is to compute a
*  random point (x, y) inside the circle centered at (0, 0) with
*
*     x * Math.sqrt(-2.0 * Math.log(r) / r)
*
*  and
*
*     y * Math.sqrt(-2.0 * Math.log(r) / r)
*
*  are each Gaussian random variables with mean 0 and standard deviation 1.
*  This formula appears in
*
*     Knuth, The Art of Computer Programming, Volume 2, p. 122.
*
*
*  Sample executions
*  ---------------------
*  % java StdGaussian
*  -1.2927277357189828
*
*  % java StdGaussian
*  0.32433796089430544
*
*  % java StdGaussian
*  -0.1174251833833895
*
*  % java StdGaussian
*  0.053192581194524566
*
*************************************************************************/

public class StdGaussian {

public static void main(String[] args) {
double r, x, y;

// find a uniform random point (x, y) inside unit circle
do {
x = 2.0 * Math.random() - 1.0;
y = 2.0 * Math.random() - 1.0;
r = x*x + y*y;
} while (r > 1 || r == 0);    // loop executed 4 / pi = 1.273.. times on average
// http://en.wikipedia.org/wiki/Box-Muller_transform

// apply the Box-Muller formula to get standard Gaussian z
double z = x * Math.sqrt(-2.0 * Math.log(r) / r);

// print it to standard output
System.out.println(z);
}

}

```

Last updated: Thu Sep 2 10:52:39 EDT 2004 .