s11ac returns the value of the inverse hyperbolic cosine, $\mathrm{arccosh}\u200ax$. The result is in the principal positive branch.

# Syntax

C# |
---|

public static double s11ac( double x, out int ifail ) |

Visual Basic |
---|

Public Shared Function s11ac ( _ x As Double, _ <OutAttribute> ByRef ifail As Integer _ ) As Double |

Visual C++ |
---|

public: static double s11ac( double x, [OutAttribute] int% ifail ) |

F# |
---|

static member s11ac : x : float * ifail : int byref -> float |

#### Parameters

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

s11ac returns the value of the inverse hyperbolic cosine, $\mathrm{arccosh}\u200ax$. The result is in the principal positive branch.

# Description

s11ac calculates an approximate value for the inverse hyperbolic cosine, $\mathrm{arccosh}\u200ax$. It is based on the relation

This form is used directly for $1<x<{10}^{k}$, where $k=n/2+1$, and the machine uses approximately $n$ decimal place arithmetic.

$$\mathrm{arccosh}\u200ax=\mathrm{ln}\left(x+\sqrt{{x}^{2}-1}\right)\text{.}$$ |

For $x\ge {10}^{k}$, $\sqrt{{x}^{2}-1}$ is equal to $\sqrt{x}$ to within the accuracy of the machine and hence we can guard against premature overflow and, without loss of accuracy, calculate

$$\mathrm{arccosh}\u200ax=\mathrm{ln}\u200a2+\mathrm{ln}\u200ax\text{.}$$ |

# 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 $1.0$, for which $\mathrm{arccosh}\u200ax$ is not defined. The result returned is zero.

# Accuracy

If $\delta $ and $\epsilon $ are the relative errors in the argument and result respectively, then in principle

That is the relative error in the argument is amplified by a factor at least $\frac{x}{\sqrt{{x}^{2}-1}\mathrm{arccosh}\u200ax}$ in the result. The equality should apply 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. The behaviour of the amplification factor is shown in the following graph:

$$\left|\epsilon \right|\simeq \left|\frac{x}{\sqrt{{x}^{2}-1}\mathrm{arccosh}\u200ax}\times \delta \right|\text{.}$$ |

**Figure 1**

It should be noted that for $x>2$ the factor is always less than $1.0$. For large $x$ we have the absolute error $E$ in the result, in principle, given by

This means that eventually accuracy is limited by machine precision. More significantly for $x$ close to $1$, $x-1\sim \delta $, the above analysis becomes inapplicable due to the fact that both function and argument are bounded, $x\ge 1$, $\mathrm{arccosh}\u200ax\ge 0$. In this region we have

That is, there will be approximately half as many decimal places correct in the result as there were correct figures in the argument.

$$E\sim \delta \text{.}$$ |

$$E\sim \sqrt{\delta}\text{.}$$ |

# 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#): s11ace.cs