17 constexpr
double thresh = .46875;
18 constexpr
double xbig = 26.543;
19 const double xhuge = 6.71e7;
20 const double xmax = 2.53e307;
22 const double c[9] = { .564188496988670089,8.88314979438837594,
23 66.1191906371416295,298.635138197400131,881.95222124176909,
24 1712.04761263407058,2051.07837782607147,1230.33935479799725,
25 2.15311535474403846e-8 };
26 const double d[8] = { 15.7449261107098347,117.693950891312499,
27 537.181101862009858,1621.38957456669019,3290.79923573345963,
28 4362.61909014324716,3439.36767414372164,1230.33935480374942 };
29 const double p[6] = { .305326634961232344,.360344899949804439,
30 .125781726111229246,.0160837851487422766,6.58749161529837803e-4,
31 .0163153871373020978 };
32 const double q[5] = { 2.56852019228982242,1.87295284992346047,
33 .527905102951428412,.0605183413124413191,.00233520497626869185 };
34 constexpr
double sqrpi = .56418958354775628695;
38 double xden, xnum, result;
155 for (i = 0; i < 7; ++i)
157 xnum = (xnum + c[i]) * y;
158 xden = (xden + d[i]) * y;
160 result = (xnum + c[7]) / (xden + d[7]);
162 del = (y - ysq) * (y + ysq);
163 result = std::exp(-ysq * ysq) * std::exp(-del) * result;
185 for (
unsigned i = 0; i < 4; ++i)
187 xnum = (xnum + p[i]) * ysq;
188 xden = (xden + q[i]) * ysq;
190 result = ysq * (xnum + p[4]) / (xden + q[4]);
191 result = (sqrpi - result) / y;
193 del = (y - ysq) * (y + ysq);
194 result = std::exp(-ysq * ysq) * std::exp(-del) * result;
201 result = 2.0 - result;
Error Function (erf) approximations.
double vnl_erf(double x)
The Error function.
double vnl_erfc(double x)
The Complementary Error function.
vnl_bignum abs(vnl_bignum const &x)
vnl_decnum floor(vnl_decnum const &x)