Guest User

Untitled

a guest
Jan 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. const double c1 = 0.337475482272615;
  2. const double c2 = 0.976169019091719;
  3. const double c3 = 0.160797971491821;
  4. const double c4 = 2.76438810333863E-02;
  5. const double c5 = 3.8405729373609E-03;
  6. const double c6 = 3.951896511919E-04;
  7. const double c7 = 3.21767881768E-05;
  8. const double c8 = 2.888167364E-07;
  9. const double c9 = 3.960315187E-07;
  10. /// <summary>
  11. /// Calculates the Normal Standard numbers given u, the associated uniform number (0, 1)
  12. /// </summary>
  13. ///
  14. <param name="u">
  15. /// <returns></returns>
  16. public static double Inverse(double u)
  17. {
  18. double[] a = new double[4] { 2.50662823884, -18.61500062529, 41.39119773534, -25.44106049637 };
  19. double[] b = new double[4] { -8.4735109309, 23.08336743743, -21.06224101826, 3.13082909833 };
  20.  
  21. double x = u - 0.5;
  22. double r;
  23. if (Math.Abs(x) < 0.42)
  24. {
  25. r = x * x;
  26. 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);
  27. }
  28. else
  29. {
  30. r = Math.Log(-Math.Log(1 - u));
  31. if (x <= 0)
  32. {
  33. r = -r;
  34. }
  35. r = c1 + r * (c2 + r * (c3 + r * (c4 + r * (c5 + r * (c6 + r * (c7 + r * (c8 + r * c9)))))));
  36. if (x < 0)
  37. {
  38. r = -r;
  39. }
  40. }
  41. return r;
  42. }
Add Comment
Please, Sign In to add comment