Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_specfun_arccos (s09ab)

## Purpose

nag_specfun_arccos (s09ab) returns the value of the inverse circular cosine, $\mathrm{arccos}x$, via the function name; the result is in the principal range $\left(0,\pi \right)$.

## Syntax

[result, ifail] = s09ab(x)
[result, ifail] = nag_specfun_arccos(x)

## Description

nag_specfun_arccos (s09ab) calculates an approximate value for the inverse circular cosine, $\mathrm{arccos}x$. It is based on the Chebyshev expansion
 $arcsin⁡x=x×yt=x∑′r=0arTrt$
where $\frac{-1}{\sqrt{2}}\le x\le \frac{1}{\sqrt{2}}\text{, and }t=4{x}^{2}-1$.
For ${x}^{2}\le \frac{1}{2}\text{, }\mathrm{arccos}x=\frac{\pi }{2}-\mathrm{arcsin}x$.
For $-1\le x<\frac{-1}{\sqrt{2}}\text{, }\mathrm{arccos}x=\pi -\mathrm{arcsin}\sqrt{1-{x}^{2}}$.
For $\frac{1}{\sqrt{2}}.
For $\left|x\right|>1\text{, }\mathrm{arccos}x$ is undefined and the function fails.

## References

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

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{x}$ – double scalar
The argument $x$ of the function.
Constraint: $\left|{\mathbf{x}}\right|\le 1.0$.

None.

### Output Parameters

1:     $\mathrm{result}$ – double scalar
The result of the function.
2:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{ifail}}={\mathbf{0}}$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Errors or warnings detected by the function:
${\mathbf{ifail}}=1$
nag_specfun_arccos (s09ab) has been called with $\left|{\mathbf{x}}\right|>1.0$, for which arccos is undefined. A zero result is returned.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

## Accuracy

If $\delta$ and $\epsilon$ are the relative errors in the argument and the result, respectively, then in principle
 $ε≃ x arccos⁡x 1-x2 ×δ .$
The equality should hold if $\delta$ is greater than the machine precision ($\delta$ is due to data errors etc.), but if $\delta$ is due simply to round-off in the machine it is possible that rounding etc. in internal calculations may lose one extra figure.
The behaviour of the amplification factor $\frac{x}{\mathrm{arccos}x\sqrt{1-{x}^{2}}}$ is shown in the graph below.
In the region of $x=0$ this factor tends to zero and the accuracy will be limited by the machine precision. For $\left|x\right|$ close to one, $1-\left|x\right|\sim \delta$, the above analysis is not applicable owing to the fact that both the argument and the result are bounded $\left|x\right|\le 1$, $0\le \mathrm{arccos}x\le \pi$.
In the region of $x\sim -1$ we have $\epsilon \sim \sqrt{\delta }$, that is the result will have approximately half as many correct significant figures as the argument.
In the region $x\sim +1$, we have that the absolute error in the result, $E$, is given by $E\sim \sqrt{\delta }$, that is the result will have approximately half as many decimal places correct as there are correct figures in the argument. Figure 1

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.
```function s09ab_example

fprintf('s09ab example results\n\n');

x = [-0.5  0.1  0.9];
n = size(x,2);
result = x;

for j=1:n
[result(j), ifail] = s09ab(x(j));
end

disp('      x        arccos(x)');
fprintf('%12.3e%12.3e\n',[x; result]);

```
```s09ab example results

x        arccos(x)
-5.000e-01   2.094e+00
1.000e-01   1.471e+00
9.000e-01   4.510e-01
```