14 #include "msdevstudio/MSconfig.h"
24 #ifdef ITERATOR_MEMBER_DEFECT
38 Erfc::Erfc(
double m,
double s,
double n)
47 void Erfc::initialize ()
51 m_parm_names.push_back (
"Mean" );
52 m_parm_names.push_back (
"Sigma" );
53 m_parm_names.push_back (
"Normalization" );
60 return new Erfc ( *
this );
65 double Erfc::operator () (
double value)
const
69 double x = calcRed(value);
73 result *= m_parms[NORM];
84 m_parms[NORM] = helper->
maxValue () / 2;
88 double Erfc::derivByParm (
int i,
double value )
const
94 result = -1.0/m_parms[SIGMA] * m_parms[NORM] * derivByRed ( calcRed(value) );
99 result = - calcRed(value)/m_parms[SIGMA] * m_parms[NORM] * derivByRed ( calcRed(value) );
104 result = operator () ( value ) / m_parms[NORM];
118 double Erfc::derivByRed(
const double x )
const
121 static const double m_2_sqrtpi = 1.12837916709551257390;
123 double result = - m_2_sqrtpi;
131 double Erfc::calcErfc(
double x)
const
140 a1 = -1.26551223,
a2 = 1.00002368,
141 a3 = 0.37409196, a4 = 0.09678418,
142 a5 = -0.18628806, a6 = 0.27886807,
143 a7 = -1.13520398, a8 = 1.48851587,
144 a9 = -0.82215223, a10 = 0.17087277;
148 double z = x>=0 ? x : -x;
150 if (z <= 0)
return v;
152 double t = 1/(1+0.5*z);
154 v = t*exp((-z*z) +a1+t*(
a2+t*(a3+t*(a4+t*(a5+t*(a6+t*(a7+t*(a8+t*(a9+t*a10)))))))));