# HP Forums

Full Version: Which formula does randNorm use?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
According to Wikipedia, the "Box-Muller method" for generating random values which are "normally" distributed (that is, fitting the "normal" curve, AKA the bell curve) is this: generate two uniformly random numbers between 0 and 1 (e.g. two outputs from Prime's RANDOM function), call them $$U$$ and $$V$$, then plug them into this formula:

$${\sqrt {-2\ln U}}\cdot\cos(2\pi V)$$

This returns random numbers which are normally distributed around 0 with a standard deviation of 1. Plot a bunch of them and you'll see a nice bell curve.

Of course, if you need normally distributed random numbers centered around a mean of $$M$$ with a standard deviation of $$S$$, you take the above result and simply stretch it by a factor of $$S$$, then shift it up by $$M$$, like this:

$$M+S\cdot{\sqrt {-2\ln U}}\cdot\cos(2\pi V)$$

However, I'm puzzled why the "Box-Muller method" uses $$2\pi$$ instead of just $$\pi$$. Since the range of $$\cos(2\pi V)$$ is the same as the range of $$\cos(\pi V)$$, it seems to me that multiplying by 2 here is mathematically redundant.

The reason I'm even bringing this up is that all the programs (for older HP calculator models) which input $$M$$ and $$S$$ and return $$randNorm(M,S)$$ do NOT multiply by 2. They simply use this formula (notice it's just $$\pi$$, not $$2\pi$$):

$$M+S\cdot{\sqrt {-2\ln U}}\cdot\cos(\pi V)$$

1a. If Yes, then why does everybody say that the Box-Muller method needs $$2\pi$$?
2a. If it uses Box-Muller with $$2\pi$$, why is the 2 in there?
     double u=giac_rand(contextptr)/(rand_max2+1.0);     double d=giac_rand(contextptr)/(rand_max2+1.0);     return std::sqrt(-2*std::log(u))*std::cos(2*M_PI*d);