﻿ s13ac Method
s13ac returns the value of the cosine integral
 $Cix=γ+ln x+∫0xcos u-1udu, x>0$
where $\gamma$ denotes Euler's constant.

# Syntax

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

#### Parameters

x
Type: System..::..Double
On entry: the argument $x$ of the function.
Constraint: ${\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

s13ac returns the value of the cosine integral
 $Cix=γ+ln x+∫0xcos u-1udu, x>0$
where $\gamma$ denotes Euler's constant.

# Description

s13ac calculates an approximate value for $\mathrm{Ci}\left(x\right)$.
For $0 it is based on the Chebyshev expansion
 $Cix=ln x+∑r=0′arTrt,t=2x162-1.$
For $16 where the value of ${x}_{\mathrm{hi}}$ is given in the Users' Note for your implementation,
 $Cix=fxsin xx-gxcos xx2$
where $f\left(x\right)=\underset{r=0}{{\sum }^{\prime }}\phantom{\rule{0.25em}{0ex}}{f}_{r}{T}_{r}\left(t\right)$ and $g\left(x\right)=\underset{r=0}{{\sum }^{\prime }}\phantom{\rule{0.25em}{0ex}}{g}_{r}{T}_{r}\left(t\right)$, $t=2{\left(\frac{16}{x}\right)}^{2}-1$.
For $x\ge {x}_{\mathrm{hi}}$, $\mathrm{Ci}\left(x\right)=0$ to within the accuracy possible (see [Accuracy]).

# References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
The method has been called with an argument less than or equal to zero for which the function is not defined. The result returned is zero.
${\mathbf{ifail}}=-9000$
An error occured, see message report.

# Accuracy

If $E$ and $\epsilon$ are the absolute and relative errors in the result and $\delta$ is the relative error in the argument then in principle these are related by
 $E≃δcos xand ​ε≃δcos xCix.$
That is accuracy will be limited by machine precision near the origin and near the zeros of $\mathrm{cos} x$, but near the zeros of $\mathrm{Ci}\left(x\right)$ only absolute accuracy can be maintained.
The behaviour of this amplification is shown in Figure 1.
Figure 1
For large values of $x$, $\mathrm{Ci}\left(x\right)\sim \frac{\mathrm{sin} x}{x}$ therefore $\epsilon \sim \delta x\mathrm{cot} x$ and since $\delta$ is limited by the finite precision of the machine it becomes impossible to return results which have any relative accuracy. That is, when $x\ge 1/\delta$ we have that $\left|\mathrm{Ci}\left(x\right)\right|\le 1/x\sim E$ and hence is not significantly different from zero.
Hence ${x}_{\mathrm{hi}}$ is chosen such that for values of $x\ge {x}_{\mathrm{hi}}$, $\mathrm{Ci}\left(x\right)$ in principle would have values less than the machine precision and so is essentially zero.

None.

None.

# Example

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

Example program (C#): s13ace.cs

Example program data: s13ace.d

Example program results: s13ace.r