﻿ s13aa Method
s13aa returns the value of the exponential integral ${E}_{1}\left(x\right)$.

# Syntax

C#
```public static double s13aa(
double x,
out int ifail
)```
Visual Basic
```Public Shared Function s13aa ( _
x As Double, _
<OutAttribute> ByRef ifail As Integer _
) As Double```
Visual C++
```public:
static double s13aa(
double x,
[OutAttribute] int% ifail
)```
F#
```static member s13aa :
x : float *
ifail : int byref -> float
```

#### Parameters

x
Type: System..::..Double
On entry: the argument $x$ of the function.
Constraint: $-{x}_{\mathrm{hi}}\le {\mathbf{x}}<0.0$ or ${\mathbf{x}}>0.0$.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

#### Return Value

s13aa returns the value of the exponential integral ${E}_{1}\left(x\right)$.

# Description

s13aa calculates an approximate value for
 $E1x=-Ei-x=∫x∞e-uudu.$
using Chebyshev expansions, where $x$ is real. For $x<0$, the real part of the principal value of the integral is taken. The value ${E}_{1}\left(0\right)$ is infinite, and so, when $x=0$, s13aa exits with an error and returns the largest representable machine number.
For $0,
 $E1x=yt-ln x=∑′rarTrt-ln x,$
where $t=\frac{1}{2}x-1$.
For $x>4$,
 $E1x=e-xxyt=e-xx∑′rarTrt,$
where $t=-1.0+\frac{14.5}{\left(x+3.25\right)}=\frac{11.25-x}{3.25+x}$.
In both cases, $-1\le t\le +1$.
For $x<0$, the approximation is based on expansions proposed by Cody and Thatcher Jr. (1969). Precautions are taken to maintain good relative accuracy in the vicinity of ${x}_{0}\approx -0.372507\dots \text{}$, which corresponds to a simple zero of Ei($-x$).
s13aa guards against producing underflows and overflows by using the parameter ${x}_{\mathrm{hi}}$; see the Users' Note for your implementation for the value of ${x}_{\mathrm{hi}}$. To guard against overflow, if $x<-{x}_{\mathrm{hi}}$ the method terminates and returns the negative of the largest representable machine number. To guard against underflow, if $x>{x}_{\mathrm{hi}}$ the result is set directly to zero.

# References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications
Cody W J and Thatcher Jr. H C (1969) Rational Chebyshev approximations for the exponential integral Ei$\left(x\right)$ Math. Comp. 23 289–303

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{x}}=0.0$ and the function is infinite. The result returned is the largest representable machine number.
${\mathbf{ifail}}=2$
The evaluation has been abandoned due to the likelihood of overflow. The argument ${\mathbf{x}}<-{x}_{\mathrm{hi}}$, and the result is returned as the negative of the largest representable machine number.
${\mathbf{ifail}}=-9000$
An error occured, see message report.

# Accuracy

Unless stated otherwise, it is assumed that $x>0$.
If $\delta$ and $\epsilon$ are the relative errors in argument and result respectively, then in principle,
 $ε≃e-xE1x×δ$
so the relative error in the argument is amplified in the result by at least a factor ${e}^{-x}/{E}_{1}\left(x\right)$. The equality should hold if $\delta$ is greater than the machine precision ($\delta$ due to data errors etc.) but if $\delta$ is simply a result of round-off in the machine representation, it is possible that an extra figure may be lost in internal calculation and round-off.
The behaviour of this amplification factor is shown in the following graph:
Figure 1
It should be noted that, for absolutely small $x$, the amplification factor tends to zero and eventually the error in the result will be limited by machine precision.
For absolutely large $x$,
 $ε∼xδ=Δ,$
the absolute error in the argument.
For $x<0$, empirical tests have shown that the maximum relative error is a loss of approximately $1$ decimal place.

None.

None.

# Example

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

Example program (C#): s13aae.cs

Example program data: s13aae.d

Example program results: s13aae.r