using System.Collections.Generic;
public static void Main()
List<Row> list = new List<Row>();
list.Add(new Row { Number = 0, Normsinv = double.NaN, InverseNormal = -10 });
list.Add(new Row { Number = 1E-25, Normsinv = -10.4204522008031, InverseNormal = -10 });
list.Add(new Row { Number = 0.00001, Normsinv = -4.26489079392283, InverseNormal = -4.26489079392283 });
list.Add(new Row { Number = 0.0001, Normsinv = -3.71901648545568, InverseNormal = -3.71901648545568 });
list.Add(new Row { Number = 0.001, Normsinv = -3.09023230616781, InverseNormal = -3.09023230616781 });
list.Add(new Row { Number = 0.01, Normsinv = -2.32634787404084, InverseNormal = -2.32634787404084 });
list.Add(new Row { Number = 0.05, Normsinv = -1.64485362695147, InverseNormal = -1.64485362695147 });
list.Add(new Row { Number = 0.1, Normsinv = -1.2815515655446, InverseNormal = -1.2815515655446 });
list.Add(new Row { Number = 0.15, Normsinv = -1.03643338949379, InverseNormal = -1.03643338949379 });
list.Add(new Row { Number = 0.2, Normsinv = -0.841621233572915, InverseNormal = -0.841621233572914 });
list.Add(new Row { Number = 0.25, Normsinv = -0.674489750196082, InverseNormal = -0.674489750196082 });
list.Add(new Row { Number = 0.3, Normsinv = -0.524400512708041, InverseNormal = -0.524400512708041 });
list.Add(new Row { Number = 0.35, Normsinv = -0.385320466407568, InverseNormal = -0.385320466407568 });
list.Add(new Row { Number = 0.4, Normsinv = -0.2533471031358, InverseNormal = -0.2533471031358 });
list.Add(new Row { Number = 0.45, Normsinv = -0.125661346855074, InverseNormal = -0.125661346855074 });
list.Add(new Row { Number = 0.5, Normsinv = 0, InverseNormal = 0 });
list.Add(new Row { Number = 0.55, Normsinv = 0.125661346855074, InverseNormal = 0.125661346855074 });
list.Add(new Row { Number = 0.6, Normsinv = 0.2533471031358, InverseNormal = 0.2533471031358 });
list.Add(new Row { Number = 0.65, Normsinv = 0.385320466407568, InverseNormal = 0.385320466407568 });
list.Add(new Row { Number = 0.7, Normsinv = 0.524400512708041, InverseNormal = 0.524400512708041 });
list.Add(new Row { Number = 0.75, Normsinv = 0.674489750196082, InverseNormal = 0.674489750196082 });
list.Add(new Row { Number = 0.8, Normsinv = 0.841621233572915, InverseNormal = 0.841621233572914 });
list.Add(new Row { Number = 0.85, Normsinv = 1.03643338949379, InverseNormal = 1.03643338949379 });
list.Add(new Row { Number = 0.9, Normsinv = 1.2815515655446, InverseNormal = 1.2815515655446 });
list.Add(new Row { Number = 0.95, Normsinv = 1.64485362695147, InverseNormal = 1.64485362695147 });
list.Add(new Row { Number = 0.99, Normsinv = 2.32634787404084, InverseNormal = 2.32634787404084 });
list.Add(new Row { Number = 0.999, Normsinv = 3.09023230616781, InverseNormal = 3.09023230616781 });
list.Add(new Row { Number = 0.9999, Normsinv = 3.71901648545571, InverseNormal = 3.71901648545571 });
list.Add(new Row { Number = 0.99999, Normsinv = 4.26489079392384, InverseNormal = 4.26489079392384 });
list.Add(new Row { Number = 1, Normsinv = 8.20953615160139, InverseNormal = 10 });
list.Add(new Row { Number = 1, Normsinv = double.NaN, InverseNormal = 10 });
list.ForEach(x => x.CalcuatedInverseNormal = InverseNormal(x.Number));
list.ForEach(x => Console.WriteLine("{0} | {1} | {2} | {3} | {4}", x.Number, x.Normsinv, x.InverseNormal, x.CalcuatedInverseNormal, x.InverseNormal - x.CalcuatedInverseNormal));
public static double InverseNormal(double P)
double ZERO, ONE, HALF, SPLIT1, SPLIT2, CONST1, CONST2, A0, A1, A2, A3, A4, A5, A6, A7;
double B1, B2, B3, B4, B5, B6, B7;
double C0, C1, C2, C3, C4, C5, C6, C7;
double D1, D2, D3, D4, D5, D6, D7;
double E0, E1, E2, E3, E4, E5, E6, E7;
double F1, F2, F3, F4, F5, F6, F7, Q, R;
if (P < 0.000000000000001)
else if (P > 0.999999999999999)
C6 = 2.27238449892692E-02;
C7 = 7.74545014278341E-04;
D5 = 1.51986665636165E-02;
D6 = 5.47593808499535E-04;
D7 = 1.05075007164442E-09;
E4 = 2.65321895265761E-02;
E5 = 1.24266094738808E-03;
E6 = 2.71155556874349E-05;
E7 = 2.01033439929229E-07;
F3 = 1.48753612908506E-02;
F4 = 7.86869131145613E-04;
F5 = 1.84631831751005E-05;
F6 = 1.42151175831645E-07;
F7 = 2.04426310338994E-15;
if ((Math.Abs(Q) <= SPLIT1))
InverseNormal = Q * (((((((A7 * R + A6) * R + A5) * R + A4) * R + A3) * R + A2) * R + A1) * R + A0) / (((((((B7 * R + B6) * R + B5) * R + B4) * R + B3) * R + B2) * R + B1) * R + ONE);
R = Math.Sqrt(-Math.Log(R));
InverseNormal = (((((((C7 * R + C6) * R + C5) * R + C4) * R + C3) * R + C2) * R + C1) * R + C0) / (((((((D7 * R + D6) * R + D5) * R + D4) * R + D3) * R + D2) * R + D1) * R + ONE);
InverseNormal = (((((((E7 * R + E6) * R + E5) * R + E4) * R + E3) * R + E2) * R + E1) * R + E0) / (((((((F7 * R + F6) * R + F5) * R + F4) * R + F3) * R + F2) * R + F1) * R + ONE);
InverseNormal = -InverseNormal;
public double Number { get; set; }
public double Normsinv { get; set; }
public double InverseNormal { get; set; }
public double CalcuatedInverseNormal { get; set; }