Function RandGauss(Mean, Sd) As Double
'from Numerical Recipes in C, second edition, page 289
'returns a random number from Gaussian dis with mean and Sd specified
Static NextRnd As Double
Static RndWaiting As Boolean
Static Randomized As Boolean
Dim fac, rsq, v1, v2, RandStd As Double
If Not (Randomized) Then
Randomize
Randomized = True
End If
If Not (RndWaiting) Then
Do
v1 = 2# * Rnd() - 1#
v2 = 2# * Rnd() - 1#
rsq = v1 * v1 + v2 * v2
Loop Until rsq <= 1#
fac = Sqr(-2# * Log(rsq) / rsq) 'natural log
NextRnd = v1 * fac
RndWaiting = True
RandStd = v2 * fac
Else
RndWaiting = False
RandStd = NextRnd
End If
'RandStd has mean zero and SD=1.
RandGauss = (RandStd * Sd) + Mean
End Function