# NAG FL Interfaces13acf (integral_​cos)

## ▸▿ Contents

Settings help

FL Name Style:

FL Specification Language:

## 1Purpose

s13acf returns the value of the cosine integral
 $Ci(x)=γ+ln⁡x+∫0xcos⁡u-1udu, x>0$
via the routine name where $\gamma$ denotes Euler's constant.

## 2Specification

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

## 3Description

s13acf calculates an approximate value for $\mathrm{Ci}\left(x\right)$.
For $0 it is based on the Chebyshev expansion
 $Ci(x)=ln⁡x+∑r=0′arTr(t),t=2 (x16) 2-1.$
For $16 where the value of ${x}_{\mathrm{hi}}$ is given in the Users' Note for your implementation,
 $Ci(x)=f(x)sin⁡xx-g(x)cos⁡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 Section 7).
NIST Digital Library of Mathematical Functions

## 5Arguments

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

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, ${\mathbf{x}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{x}}>0.0$.
The routine has been called with an argument less than or equal to zero for which $\mathrm{Ci}\left(x\right)$ is not defined.
${\mathbf{ifail}}=-99$
An unexpected error has been triggered by this routine. Please contact NAG.
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

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⁡x|and ​ |ε|≃ | δ cos⁡x Ci(x) | .$
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 $|\mathrm{Ci}\left(x\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.

## 8Parallelism and Performance

Background information to multithreading can be found in the Multithreading documentation.
s13acf 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$ and prints the results.

### 10.1Program Text

Program Text (s13acfe.f90)

### 10.2Program Data

Program Data (s13acfe.d)

### 10.3Program Results

Program Results (s13acfe.r)