## ▸▿ Contents

Settings help

FL Name Style:

FL Specification Language:

## 1Purpose

s15adf returns the value of the complementary error function, $\mathrm{erfc}\left(x\right)$, via the function name.

## 2Specification

Fortran Interface
 Real (Kind=nag_wp) :: s15adf Integer, Intent (Inout) :: ifail Real (Kind=nag_wp), Intent (In) :: x
#include <nag.h>
 double s15adf_ (const double *x, Integer *ifail)
The routine may be called by the names s15adf or nagf_specfun_erfc_real.

## 3Description

s15adf calculates an approximate value for the complement of the error function
 $erfc(x) = 2π ∫x∞ e-t2 dt = 1-erf(x) .$
Unless stated otherwise in the Users' Note, s15adf calls the complementary error function supplied by the compiler used for your implementation; as such, details of the underlying algorithm should be obtained from the documentation supplied by the compiler vendor. The following discussion only applies if the Users' Note for your implementation indicates that the compiler's supplied function was not available.
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 $|x|\le \stackrel{^}{x}$ the value of $\mathrm{erfc}\left(x\right)$ is based on the following rational Chebyshev expansion for $\mathrm{erf}\left(x\right)$:
 $erf(x) ≈ xRℓ,m (x2) ,$
where ${R}_{\ell ,m}$ denotes a rational function of degree $\ell$ in the numerator and $m$ in the denominator.
For $|x|>\stackrel{^}{x}$ the value of $\mathrm{erfc}\left(x\right)$ is based on a rational Chebyshev expansion for $\mathrm{erfc}\left(x\right)$: for $\stackrel{^}{x}<|x|\le 4$ the value is based on the expansion
 $erfc(x) ≈ ex2 Rℓ,m (x) ;$
and for $|x|>4$ it is based on the expansion
 $erfc(x) ≈ ex2 x (1π+1x2Rℓ,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).
For $|x|\ge {x}_{\mathrm{hi}}$ there is a danger of setting underflow in $\mathrm{erfc}\left(x\right)$ (the value of ${x}_{\mathrm{hi}}$ is given in the Users' Note for your implementation).. For $x\ge {x}_{\mathrm{hi}}$, s15adf returns $\mathrm{erfc}\left(x\right)=0$; for $x\le -{x}_{\mathrm{hi}}$ it returns $\mathrm{erfc}\left(x\right)=2$.

## 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{x}$Real (Kind=nag_wp) Input
On entry: the argument $x$ of the function.
2: $\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

There are no failure exits from s15adf. The argument ifail has been included for consistency with other routines in this chapter.

## 7Accuracy

Unless stated otherwise in the Users' Note, s15adf calls the complementary error function supplied by the compiler used for your implementation. The following discussion only applies if the Users' Note for your implementation indicates that the compiler's supplied function was not available.
If $\delta$ and $\epsilon$ are relative errors in the argument and result, respectively, then in principle
 $|ε|≃ | 2x e -x2 πerfc(x) δ| .$
That is, the relative error in the argument, $x$, is amplified by a factor $\frac{2x{e}^{-{x}^{2}}}{\sqrt{\pi }\mathrm{erfc}\left(x\right)}$ in the result.
The behaviour of this factor is shown in Figure 1.
It should be noted that near $x=0$ this factor behaves as $\frac{2x}{\sqrt{\pi }}$ and hence the accuracy is largely determined by the machine precision. Also, for large negative $x$, where the factor is $\text{}\sim \frac{x{e}^{-{x}^{2}}}{\sqrt{\pi }}$, accuracy is mainly limited by machine precision. However, for large positive $x$, the factor becomes $\text{}\sim 2{x}^{2}$ and to an extent relative accuracy is necessarily lost. The absolute accuracy $E$ is given by
 $E ≃ 2xe-x2π δ$
so absolute accuracy is guaranteed for all $x$.

## 8Parallelism and Performance

### 9.1Internal Changes

Internal changes have been made to this routine as follows:
• At Mark 27.1:
Modified to use a compiler-supplied erfc function, when available.
For details of all known issues which have been reported for the NAG Library please refer to the Known Issues.

## 10Example

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