54 const double tiny = std::numeric_limits<double>::min();
59 std::complex<double> f(z);
60 std::complex<double> C(f);
61 std::complex<double> D(0.0);
62 std::complex<double>
delta;
70 if ((D.real() == 0.0) && (D.imag() == 0.0))
82 f = f *
exp(-z * z) / std::sqrt(
pi);
102 const double tiny = std::numeric_limits<double>::min();
103 std::complex<double>
sum(0.0);
104 std::complex<double>
term(z);
105 std::complex<double>
z2(z*z);
108 sum +=
term /
static_cast<double>(2 * n + 1);
109 term *= -
z2 /
static_cast<double>(n + 1);
112 return sum * 2.0 / std::sqrt(
pi);
130 int n0 = 2 *
static_cast<int>(z.imag() / (2 *
h) + 0.5);
132 std::complex<double>
z0(0.0,
n0 *
h);
133 std::complex<double>
zp(z -
z0);
134 std::complex<double>
sum(0.0, 0.0);
138 for (
int np = -35;
np <= 35;
np += 2) {
139 std::complex<double> t(
zp.real(),
zp.imag() -
np *
h);
140 std::complex<double> b(
exp(t * t) /
static_cast<double>(
np +
n0));
146 return std::complex<double>(-
sum.imag(),
sum.real());
154std::complex<double>
erf(
const std::complex<double>& z)
161 if (std::abs(z.real()) < 0.5)
171 double Y, A, B,
X, Z, W,
WI,
SN,
SD, F,
Z2,
SIGMA;
172 double A1 = -.5751703,
A2 = -1.896513,
A3 = -.5496261E-1;
173 double B0 = -.1137730,
B1 = -3.293474,
B2 = -2.374996,
B3 = -1.187515;
174 double C0 = -.1146666,
C1 = -.1314774,
C2 = -.2368201,
C3 = .5073975e-1;
175 double D0 = -44.27977,
D1 = 21.98546,
D2 = -7.586103;
176 double E0 = -.5668422E-1,
E1 = .3937021,
E2 = -.3166501,
E3 = .6208963E-1;
177 double F0 = -6.266786,
F1 = 4.666263,
F2 = -2.962883;
178 double G0 = .1851159E-3, G1 = -.2028152E-2, G2 = -.1498384,
G3 = .1078639E-1;
179 double H0 = .9952975E-1,
H1 = .5211733,
H2 = -.6888301E-1;
189 W = std::sqrt(-
log(A + A * B));
195 F = W + W * (
G0 +
SN /
SD);
200 F = W + W * (
E0 +
SN /
SD);
206 F = W + W * (
C0 +
SN /
SD);
219 return (0.5 *
::erfc(x / 1.41421356237310));
Elementary mathematical functions - header file.
Error functions - header file.
double erfinv(double P)
Inverse of error function.
double Qfunc(double x)
Q-function.
std::complex< double > erf(const std::complex< double > &z)
Error function for complex argument.
vec erfc(const vec &x)
Complementary error function.
#define it_error_if(t, s)
Abort if t is true.
vec log(const vec &x)
The natural logarithm of the elements.
vec exp(const vec &x)
Exp of the elements of a vector x.
T sum(const Vec< T > &v)
Sum of all elements in the vector.
double sign(double x)
Signum function.
IT++ compatibility types and functions.
std::complex< double > cerfc_continued_fraction(const std::complex< double > &z)
const double pi
Constant Pi.
std::complex< double > cerf_rybicki(const std::complex< double > &z)
const double eps
Constant eps.
std::complex< double > cerf_series(const std::complex< double > &z)
std::complex< double > cerf_continued_fraction(const std::complex< double > &z)
Complementary function to cerfc_continued_fraction.
bin abs(const bin &inbin)
absolute value of bin