let normalDistRandom mean stdDev = let rand = new System.Random() let rec polarBoxMullerDist () = seq { let rec getRands () = let u = (2.0 * rand.NextDouble()) - 1.0 let v = (2.0 * rand.NextDouble()) - 1.0 let w = u * u + v * v if w >= 1.0 then getRands() else u, v, w let u, v, w = getRands() let scale = System.Math.Sqrt(-2.0 * System.Math.Log(w) / w) let x = scale * u let y = scale * v yield mean + (x * stdDev); yield mean + (y * stdDev); yield! polarBoxMullerDist () } polarBoxMullerDist ()