3 #include <utl/NormalDistribution.h>
4 #include <utl/ErrorLogger.h>
39 -0.007784894002430293,
55 ERROR(
"Bad p in routine InverseNormalCDF");
56 return numeric_limits<double>::quiet_NaN();
60 return -numeric_limits<double>::infinity();
63 return numeric_limits<double>::infinity();
67 const double pp = min(p, 1 - p);
73 const double q =
sqrt(-2 * log(pp));
75 (((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5]) /
76 ((((d[0]*q + d[1])*q + d[2])*q + d[3])*q + 1);
78 const double q = pp - 0.5;
81 (((((a[0]*r + a[1])*r + a[2])*r + a[3])*r + a[4])*r + a[5])*q /
82 (((((b[0]*r + b[1])*r + b[2])*r + b[3])*r + b[4])*r + 1);
87 const double dfof = df *
sqrt(2*
kPi) * exp(0.5*
Sqr(x));
88 x -= dfof / (1 + 0.5*x*dfof);
90 return p > 0.5 ? -x : x;
96 const double xmin,
const double xmax)
98 if (xmin >= xmax || x < xmin || x > xmax)
constexpr T Sqr(const T &x)
double TruncatedNormalPDF(const double x, const double mu, const double sigma, const double xmin, const double xmax)
double InverseNormalCDF(const double p)
Inverse of the comulative normal distribution. Taken from http://home.online.no/~pjacklam/notes/invno...
double NormalPDF(const double x)
double NormalCDF(const double x)
#define ERROR(message)
Macro for logging error messages.