﻿ s01ba Method
s01ba returns a value of the shifted logarithmic function, $\mathrm{ln}\left(1+x\right)$.

Syntax

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

Parameters

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

s01ba returns a value of the shifted logarithmic function, $\mathrm{ln}\left(1+x\right)$.

Description

s01ba computes values of $\mathrm{ln}\left(1+x\right)$, retaining full relative precision even when $\left|x\right|$ is small. The method is based on the Chebyshev expansion
 $ln 1+p2+2px-1+p2-2px-=4∑k=0∞p2k+12k+1T2k+1x-.$
Setting $\stackrel{-}{x}=\frac{x\left(1+{p}^{2}\right)}{2p\left(x+2\right)}$, and choosing $p=\frac{q-1}{q+1}$, $q=\sqrt[4]{2}$ the expansion is valid in the domain $x\in \left[\frac{1}{\sqrt{2}}-1,\sqrt{2}-1\right]$.
Outside this domain, $\mathrm{ln}\left(1+x\right)$ is computed by the standard logarithmic function.

References

Lyusternik L A, Chervonenkis O A and Yanpolskii A R (1965) Handbook for Computing Elementary Functions p. 57 Pergamon Press

Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{x}}\le -1.0$.
The result is returned as zero.
${\mathbf{ifail}}=-9000$
An error occured, see message report.

Accuracy

The returned result should be accurate almost to machine precision, with a limit of about $20$ significant figures due to the precision of internal constants. Note however that if $x$ lies very close to $-1.0$ and is not exact (for example if $x$ is the result of some previous computation and has been rounded), then precision will be lost in the computation of $1+x$, and hence $\mathrm{ln}\left(1+x\right)$, in s01ba.

Parallelism and Performance

None.

Empirical tests show that the time taken for a call of s01ba usually lies between about $1.25$ and $2.5$ times the time for a call to the standard logarithm function.

Example

The example 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#): s01bae.cs

Example program data: s01bae.d

Example program results: s01bae.r