# NAG FL Interfaces15auf (erfcx_​real_​vector)

## 1Purpose

s15auf returns an array of values of the scaled complementary error function $\mathrm{erfcx}\left(x\right)$.

## 2Specification

Fortran Interface
 Subroutine s15auf ( n, x, f,
 Integer, Intent (In) :: n Integer, Intent (Inout) :: ifail Integer, Intent (Out) :: ivalid(n) Real (Kind=nag_wp), Intent (In) :: x(n) Real (Kind=nag_wp), Intent (Out) :: f(n)
#include <nag.h>
 void s15auf_ (const Integer *n, const double x[], double f[], Integer ivalid[], Integer *ifail)
The routine may be called by the names s15auf or nagf_specfun_erfcx_real_vector.

## 3Description

s15auf calculates approximate values for the scaled complementary error function
 $erfcxx = e x2 erfcx = 2 π e x2 ∫x∞ e -t2 dt = e x2 1- erfx ,$
for an array of arguments ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
Let $\stackrel{^}{x}$ be the root of the equation $\mathrm{erfc}\left(x\right)-\mathrm{erf}\left(x\right)=0$ (then $\stackrel{^}{x}\approx 0.46875$). For $\left|x\right|\le \stackrel{^}{x}$ the value of $\mathrm{erfcx}\left(x\right)$ is based on the following rational Chebyshev expansion for $\mathrm{erf}\left(x\right)$:
 $erfx ≈ xRℓ,m x2 ,$
where ${R}_{\ell ,m}$ denotes a rational function of degree $\ell$ in the numerator and $m$ in the denominator.
For $\left|x\right|>\stackrel{^}{x}$ the value of $\mathrm{erfcx}\left(x\right)$ is based on a rational Chebyshev expansion for $\mathrm{erfc}\left(x\right)$: for $\stackrel{^}{x}<\left|x\right|\le 4$ the value is based on the expansion
 $erfcx ≈ ex2 Rℓ,m x ;$
and for $\left|x\right|>4$ it is based on the expansion
 $erfcx ≈ ex2x 1π + 1x2 Rℓ,m 1/x2 .$
For each expansion, the specific values of $\ell$ and $m$ are selected to be minimal such that the maximum relative error in the expansion is of the order ${10}^{-d}$, where $d$ is the maximum number of decimal digits that can be accurately represented for the particular implementation (see x02bef).
Asymptotically, $\mathrm{erfcx}\left(x\right)\sim 1/\left(\sqrt{\pi }\left|x\right|\right)$. There is a danger of setting underflow in $\mathrm{erfcx}\left(x\right)$ whenever $x\ge {x}_{\mathrm{hi}}=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left({x}_{\mathrm{huge}},1/\left(\sqrt{\pi }{x}_{\mathrm{tiny}}\right)\right)$, where ${x}_{\mathrm{huge}}$ is the largest positive model number (see x02alf) and ${x}_{\mathrm{tiny}}$ is the smallest positive model number (see x02akf). In this case s15auf exits with ${\mathbf{ifail}}={\mathbf{1}}$ and returns ${\mathbf{ivalid}}\left(i\right)=1$ with $\mathrm{erfcx}\left({x}_{i}\right)=0$. For $x$ in the range $1/\left(2\sqrt{\epsilon }\right)\le x<{x}_{\mathrm{hi}}$, where $\epsilon$ is the machine precision, the asymptotic value $1/\left(\sqrt{\pi }\left|x\right|\right)$ is returned for $\mathrm{erfcx}\left({x}_{i}\right)$, ${\mathbf{ivalid}}\left(i\right)=2$, and s15auf exits with ${\mathbf{ifail}}={\mathbf{1}}$.
There is a danger of setting overflow in ${e}^{{x}^{2}}$ whenever $x<{x}_{\mathrm{neg}}=-\sqrt{\mathrm{log}\left({x}_{\mathrm{huge}}/2\right)}$. In this case s15auf exits with ${\mathbf{ifail}}={\mathbf{1}}$ and returns ${\mathbf{ivalid}}\left(i\right)=3$ with $\mathrm{erfcx}\left({x}_{i}\right)={x}_{\mathrm{huge}}$.
The values of ${x}_{\mathrm{hi}}$, $1/\left(2\sqrt{\epsilon }\right)$ and ${x}_{\mathrm{neg}}$ are given in the Users' Note for your implementation.

## 4References

NIST Digital Library of Mathematical Functions
Cody W J (1969) Rational Chebyshev approximations for the error function Math.Comp. 23 631–637

## 5Arguments

1: $\mathbf{n}$Integer Input
On entry: $n$, the number of points.
Constraint: ${\mathbf{n}}\ge 0$.
2: $\mathbf{x}\left({\mathbf{n}}\right)$Real (Kind=nag_wp) array Input
On entry: the argument ${x}_{\mathit{i}}$ of the function, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
3: $\mathbf{f}\left({\mathbf{n}}\right)$Real (Kind=nag_wp) array Output
On exit: $\mathrm{erfcx}\left({x}_{i}\right)$, the function values.
4: $\mathbf{ivalid}\left({\mathbf{n}}\right)$Integer array Output
On exit: ${\mathbf{ivalid}}\left(\mathit{i}\right)$ contains the error code for ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
${\mathbf{ivalid}}\left(i\right)=0$
No error.
${\mathbf{ivalid}}\left(i\right)=1$
${x}_{i}$ is too large and positive. The threshold value is the same as for ${\mathbf{ifail}}={\mathbf{1}}$ in s15agf, as defined in the Users' Note for your implementation.
${\mathbf{ivalid}}\left(i\right)=2$
${x}_{i}$ was in the interval $\left[1/\left(2\sqrt{\epsilon }\right),{x}_{\mathrm{hi}}\right)$. The threshold values are the same as for ${\mathbf{ifail}}={\mathbf{2}}$ in s15agf, as defined in the Users' Note for your implementation.
${\mathbf{ivalid}}\left(i\right)=3$
${x}_{i}$ is too small and positive. The threshold value is the same as for ${\mathbf{ifail}}={\mathbf{3}}$ in s15agf, as defined in the Users' Note for your implementation.
5: $\mathbf{ifail}$Integer Input/Output
On entry: ifail must be set to $0$, $-1$ or $1$ to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of $0$ causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of $-1$ means that an error message is printed while a value of $1$ means that it is not.
If halting is not appropriate, the value $-1$ or $1$ is recommended. If message printing is undesirable, then the value $1$ is recommended. Otherwise, the value $0$ is recommended. When the value $-\mathbf{1}$ or $\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit: ${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see Section 6).

## 6Error Indicators and Warnings

If on entry ${\mathbf{ifail}}=0$ or $-1$, explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
${\mathbf{ifail}}=1$
On entry, at least one value of x produced a result with reduced accuracy.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 0$.
${\mathbf{ifail}}=-99$
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

## 7Accuracy

The relative error in computing $\mathrm{erfcx}\left(x\right)$ may be estimated by evaluating
 $E= erfcxx - ex2 ∑ n=1 ∞ Inerfcx erfcxx ,$
where ${I}^{n}$ denotes repeated integration. Empirical results suggest that on the interval $\left(\stackrel{^}{x},2\right)$ the loss in base $b$ significant digits for maximum relative error is around $3.3$, while for root-mean-square relative error on that interval it is $1.2$ (see x02bhf for the definition of the model parameter $b$). On the interval $\left(2,20\right)$ the values are around $3.5$ for maximum and $0.45$ for root-mean-square relative errors; note that on these two intervals $\mathrm{erfc}\left(x\right)$ is the primary computation. See also Section 7 in s15adf.

## 8Parallelism and Performance

s15auf is not threaded in any implementation.

None.

## 10Example

This example reads values of the argument $x$ from a file, evaluates the function at each value of ${x}_{i}$ and prints the results.

### 10.1Program Text

Program Text (s15aufe.f90)

### 10.2Program Data

Program Data (s15aufe.d)

### 10.3Program Results

Program Results (s15aufe.r)