1# icebird_rong
if you have matlab, use norminv and randn, no need to code your own
Glasserman, pp 68
Fig. 2.13. Beasley-Springer-Moro algorithm for approximating the inverse normal.
a0 = 2.50662823884 b0 = -8.47351093090
a1 = -18.61500062529 b1 = 23.08336743743
a2 = 41.39119773534 b2 = -21.06224101826
a3 = -25.44106049637 b3 = 3.13082909833
c0 = 0.3374754822726147 c5 = 0.0003951896511919
c1 = 0.9761690190917186 c6 = 0.0000321767881768
c2 = 0.1607979714918209 c7 = 0.0000002888167364
c3 = 0.0276438810333863 c8 = 0.0000003960315187
c4 = 0.0038405729373609
y ← u − 0.5
if |y| < 0.42
r ← y ∗ y
x ← y ∗ (((a3 ∗ r + a2) ∗ r + a1) ∗ r + a0) / ((((b3 ∗ r + b2) ∗ r + b1) ∗ r + b0) ∗ r +1)
else
r ← u;
if (y > 0) r ← 1 − u
r ← log(−log(r))
x ← c0 + r ∗ (c1 + r ∗ (c2 + r ∗ (c3 + r ∗ (c4+ r ∗ (c5 + r ∗ (c6 + r ∗ (c7 + r ∗ c8)))))))
if (y < 0) x←−x
return x