# NAG C Library Function Document

## 1Purpose

nag_complex_erfc (s15ddc) computes values of the function $w\left(z\right)={e}^{-{z}^{2}}\mathrm{erfc}\left(-iz\right)$, for Complex $z$.

## 2Specification

 #include #include
 Complex nag_complex_erfc (Complex z, NagError *fail)

## 3Description

nag_complex_erfc (s15ddc) computes values of the function $w\left(z\right)={e}^{-{z}^{2}}\mathrm{erfc}\left(-iz\right)$, where $\mathrm{erfc}z$ is the complementary error function
 $erfc⁡z = 2π ∫z∞ e-t2 dt ,$
for Complex $z$. The method used is that in Gautschi (1970) for $z$ in the first quadrant of the complex plane, and is extended for $z$ in other quadrants via the relations $w\left(-z\right)=2{e}^{-{z}^{2}}-w\left(z\right)$ and $w\left(\overline{z}\right)=\overline{w\left(-z\right)}$. Following advice in Gautschi (1970) and van der Laan and Temme (1984), the code in Gautschi (1969) has been adapted to work in various precisions up to $18$ decimal places. The real part of $w\left(z\right)$ is sometimes known as the Voigt function.

## 4References

Gautschi W (1969) Algorithm 363: Complex error function Comm. ACM 12 635
Gautschi W (1970) Efficient computation of the complex error function SIAM J. Numer. Anal. 7 187–198
van der Laan C G and Temme N M (1984) Calculation of special functions: the gamma function, the exponential integrals and error-like functions CWI Tract 10 Centre for Mathematics and Computer Science, Amsterdam

## 5Arguments

1:    $\mathbf{z}$ComplexInput
On entry: the argument $z$ of the function.
2:    $\mathbf{fail}$NagError *Input/Output
The NAG error argument (see Section 3.7 in How to Use the NAG Library and its Documentation).

## 6Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 2.3.1.2 in How to Use the NAG Library and its Documentation for further information.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 2.7.6 in How to Use the NAG Library and its Documentation for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 2.7.5 in How to Use the NAG Library and its Documentation for further information.
NE_RESULT_HALF_PRECISION
Result has less than half precision when entered with argument ${\mathbf{z}}=\left(〈\mathit{\text{value}}〉,〈\mathit{\text{value}}〉\right)$.
NE_RESULT_IMAGINARY_OVERFLOW
Imaginary part of result overflows when entered with argument ${\mathbf{z}}=\left(〈\mathit{\text{value}}〉,〈\mathit{\text{value}}〉\right)$.
NE_RESULT_NO_PRECISION
Result has no precision when entered with argument ${\mathbf{z}}=\left(〈\mathit{\text{value}}〉,〈\mathit{\text{value}}〉\right)$.
NE_RESULT_OVERFLOW
Both real and imaginary parts of result overflow when entered with argument ${\mathbf{z}}=\left(〈\mathit{\text{value}}〉,〈\mathit{\text{value}}〉\right)$.
NE_RESULT_REAL_OVERFLOW
Real part of result overflows when entered with argument ${\mathbf{z}}=\left(〈\mathit{\text{value}}〉,〈\mathit{\text{value}}〉\right)$.

## 7Accuracy

The accuracy of the returned result depends on the argument $z$. If $z$ lies in the first or second quadrant of the complex plane (i.e., $\mathrm{Im}\left(z\right)$ is greater than or equal to zero), the result should be accurate almost to machine precision, except that there is a limit of about $18$ decimal places on the achievable accuracy because constants in the function are given to this precision. With such arguments, fail can only return as ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_NOERROR.
If however, $\mathrm{Im}\left(z\right)$ is less than zero, accuracy may be lost in two ways; firstly, in the evaluation of ${e}^{-{z}^{2}}$, if $\mathrm{Im}\left(-{z}^{2}\right)$ is large, in which case a warning will be issued through ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_RESULT_HALF_PRECISION or NE_RESULT_NO_PRECISION; and secondly, near the zeros of the required function, where precision is lost due to cancellation, in which case no warning is given – the result has absolute accuracy rather than relative accuracy. Note also that in this half-plane, one or both parts of the result may overflow – this is signalled through ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_RESULT_IMAGINARY_OVERFLOW, NE_RESULT_OVERFLOW or NE_RESULT_REAL_OVERFLOW.

## 8Parallelism and Performance

nag_complex_erfc (s15ddc) is not threaded in any implementation.

The time taken for a call of nag_complex_erfc (s15ddc) depends on the argument $z$, the time increasing as $\left|z\right|\to 0.0$.
nag_complex_erfc (s15ddc) may be used to compute values of $\mathrm{erfc}z$ and $\mathrm{erf}z$ for Complex $z$ by the relations $\mathrm{erfc}z={e}^{-{z}^{2}}w\left(iz\right)$, $\mathrm{erf}z=1-\mathrm{erfc}z$. (For double arguments, nag_erfc (s15adc) and nag_erf (s15aec) should be used.)

## 10Example

This example reads values of the argument $z$ from a file, evaluates the function at each value of $z$ and prints the results.

### 10.1Program Text

Program Text (s15ddce.c)

### 10.2Program Data

Program Data (s15ddce.d)

### 10.3Program Results

Program Results (s15ddce.r)