Marsaglia polar method

Marsaglia polar method

n computer science – in particular, in applications of the Monte Carlo method – the Marsaglia polar method is a method for generating a pair of independent standard normal random variables by choosing random points (x, y) in the square −1 < x < 1, −1 < y < 1 until


and then returning the required pair of normal random variables as


Theoretical basis

The underlying theory may be summarized as follows.

If u is uniformly distributed in the interval 0 ≤ u < 1, then the point (cos(2πu), sin(2πu)) is uniformly distributed on the unit circumference x2 + y2 = 1, and multiplying that point by an independent random variable ρ whose distribution is

will produce a point

whose coordinates are jointly distributed as two independent standard normal random variables.


This idea dates back to Laplace, whom Gauss credits with finding

by taking the square root of


The transformation to polar coordinates makes evident that θ is uniformly distributed (constant density) from 0 to 2π, and that the radial distance r has density


(Note that r2 has the appropriate chi square distribution.)

This method of producing a pair of independent standard normal variates by radially projecting a random point on the unit circumference to a distance given by the square root of a chi-square-2 variate is called the polar method for generating a pair of normal random variables,

Practical considerations

A direct application of this idea,

is called the Box Muller transform, in which the chi variate is generated as


but that transform requires logarithm, square root, sine and cosine functions.

The Marsaglia polar method, in which a random point (x, y) inside the unit circle is projected onto the unit circumference by setting s = x2 + y2 and forming the point

is a faster procedure.

That random point on the circumference is then radially projected the required random distance by means of

using the same s because that s is independent of the random point on the circumference and is itself uniformly distributed from 0 to 1.

Retrieved from ""
All text is available under the terms of the GNU Free Documentation License