s13ac returns the value of the cosine integral
Cix=γ+lnx+0xcosu-1udu,  x>0
where γ 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: x>0.0.
ifail
Type: System..::..Int32%
On exit: 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=γ+lnx+0xcosu-1udu,  x>0
where γ denotes Euler's constant.

Description

s13ac calculates an approximate value for Cix.
For 0<x16 it is based on the Chebyshev expansion
Cix=lnx+r=0arTrt,t=2x162-1.
For 16<x<xhi where the value of xhi is given in the Users' Note for your implementation,
Cix=fxsinxx-gxcosxx2
where fx=r=0frTrt and gx=r=0grTrt, t=216x2-1.
For xxhi, Cix=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:
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.
ifail=-9000
An error occured, see message report.

Accuracy

If E and ε are the absolute and relative errors in the result and δ is the relative error in the argument then in principle these are related by
Eδcosxand ​εδcosxCix.
That is accuracy will be limited by machine precision near the origin and near the zeros of cosx, but near the zeros of Cix only absolute accuracy can be maintained.
The behaviour of this amplification is shown in Figure 1.
Figure 1
Figure 1
For large values of x, Cixsinxx therefore εδxcotx and since δ is limited by the finite precision of the machine it becomes impossible to return results which have any relative accuracy. That is, when x1/δ we have that Cix1/xE and hence is not significantly different from zero.
Hence xhi is chosen such that for values of xxhi, Cix in principle would have values less than the machine precision and so is essentially zero.

Parallelism and Performance

None.

Further Comments

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

See Also