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

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.

$${E}_{1}\left(x\right)=-\mathrm{Ei}\left(-x\right)=\underset{x}{\overset{\infty}{\int}}\frac{{e}^{-u}}{u}du\text{.}$$ |

For $0<x\le 4$,

where $t=\frac{1}{2}x-1$.

$${E}_{1}\left(x\right)=y\left(t\right)-\mathrm{ln}\u200ax=\underset{r}{{\sum}^{\prime}}\phantom{\rule{0.25em}{0ex}}{a}_{r}{T}_{r}\left(t\right)-\mathrm{ln}\u200ax\text{,}$$ |

For $x>4$,

where $t=-1.0+\frac{14.5}{\left(x+3.25\right)}=\frac{11.25-x}{3.25+x}$.

$${E}_{1}\left(x\right)=\frac{{e}^{-x}}{x}y\left(t\right)=\frac{{e}^{-x}}{x}\underset{r}{{\sum}^{\prime}}\phantom{\rule{0.25em}{0ex}}{a}_{r}{T}_{r}\left(t\right)\text{,}$$ |

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 PublicationsCody 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.

# 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,

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.

$$\left|\epsilon \right|\simeq \left|\frac{{e}^{-x}}{{E}_{1}\left(x\right)}\times \delta \right|$$ |

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$,

the absolute error in the argument.

$$\epsilon \sim x\delta =\Delta \text{,}$$ |

For $x<0$, empirical tests have shown that the maximum relative error is a loss of approximately $1$ decimal place.

# Parallelism and Performance

None.

# Further Comments

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