Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const double c1 = 0.337475482272615;
- const double c2 = 0.976169019091719;
- const double c3 = 0.160797971491821;
- const double c4 = 2.76438810333863E-02;
- const double c5 = 3.8405729373609E-03;
- const double c6 = 3.951896511919E-04;
- const double c7 = 3.21767881768E-05;
- const double c8 = 2.888167364E-07;
- const double c9 = 3.960315187E-07;
- /// <summary>
- /// Calculates the Normal Standard numbers given u, the associated uniform number (0, 1)
- /// </summary>
- ///
- <param name="u">
- /// <returns></returns>
- public static double Inverse(double u)
- {
- double[] a = new double[4] { 2.50662823884, -18.61500062529, 41.39119773534, -25.44106049637 };
- double[] b = new double[4] { -8.4735109309, 23.08336743743, -21.06224101826, 3.13082909833 };
- double x = u - 0.5;
- double r;
- if (Math.Abs(x) < 0.42)
- {
- r = x * x;
- r = x * (((a[3] * r + a[2]) * r + a[1]) * r + a[0]) / ((((b[3] * r + b[2]) * r + b[1]) * r + b[0]) * r + 1);
- }
- else
- {
- r = Math.Log(-Math.Log(1 - u));
- if (x <= 0)
- {
- r = -r;
- }
- r = c1 + r * (c2 + r * (c3 + r * (c4 + r * (c5 + r * (c6 + r * (c7 + r * (c8 + r * c9)))))));
- if (x < 0)
- {
- r = -r;
- }
- }
- return r;
- }
Add Comment
Please, Sign In to add comment