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_tan (s07aa)

## Purpose

nag_specfun_tan (s07aa) returns the value of the circular tangent, $\mathrm{tan}x$, via the function name.

## Syntax

[result, ifail] = s07aa(x)
[result, ifail] = nag_specfun_tan(x)

## Description

nag_specfun_tan (s07aa) calculates an approximate value for the circular tangent of its argument, $\mathrm{tan}x$. It is based on the Chebyshev expansion
 $tan⁡θ=θyt=θ∑′r=0crTrt$
where $-\frac{\pi }{4}<\theta <\frac{\pi }{4}$ and $-1.
The reduction to the standard range is accomplished by taking
 $x=Nπ/2+θ$
where $N$ is an integer and $-\frac{\pi }{4}<\theta <\frac{\pi }{4}$,
i.e., $\theta =x-\left(\frac{2x}{\pi }\right)\frac{\pi }{2}$ where $N=\left[\frac{2x}{\pi }\right]=\text{​ the nearest integer to ​}\frac{2x}{\pi }$.
From the properties of $\mathrm{tan}x$ it follows that
 $tan⁡x= tan⁡θ, Neven -1/tan⁡θ, Nodd$

## 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.

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:

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

${\mathbf{ifail}}=1$
The function has been called with an argument that is larger in magnitude than $F$; the default result returned is zero.
W  ${\mathbf{ifail}}=2$
The function has been called with an argument that is too close (as determined using the relative tolerance $F$) to an odd multiple of $\pi /2$, at which the function is infinite; the function returns a value with the correct sign but a more or less arbitrary but large magnitude (see Accuracy).
${\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 result respectively, then in principle
 $ε≥2x sin⁡2x δ.$
That is a relative error in the argument, $x$, is amplified by at least a factor $2x/\mathrm{sin}2x$ in the result.
Similarly if $E$ is the absolute error in the result this is given by
 $E≥xcos2x δ.$
The equalities should hold if $\delta$ is greater than the machine precision ($\delta$ is a result of data errors etc.) but if $\delta$ is simply the round-off error in the machine it is possible that internal calculation rounding will lose an extra figure.
The graphs below show the behaviour of these amplification factors.
Figure 1
Figure 2
In the principal range it is possible to preserve relative accuracy even near the zero of $\mathrm{tan}x$ at $x=0$ but at the other zeros only absolute accuracy is possible. Near the infinities of $\mathrm{tan}x$ both the relative and absolute errors become infinite and the function must fail (error $2$).
If $N$ is odd and $\left|\theta \right|\le x{F}_{2}$ the function could not return better than two figures and in all probability would produce a result that was in error in its most significant figure. Therefore the function fails and it returns the value
 $-sign⁡θ 1xF2 ≃-sign⁡θtanπ2-xF2$
which is the value of the tangent at the nearest argument for which a valid call could be made.
Accuracy is also unavoidably lost if the function is called with a large argument. If $\left|x\right|>{F}_{1}$ the function fails (error $1$) and returns zero.

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 s07aa_example

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

x = [-2.0   -0.5     1.0     3.0    1.5708];
n = size(x,2);
result = x;

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

disp('      x         tan(x)');
fprintf('%12.4e%12.4e\n',[x; result]);

```
```s07aa example results

x         tan(x)
-2.0000e+00  2.1850e+00
-5.0000e-01 -5.4630e-01
1.0000e+00  1.5574e+00
3.0000e+00 -1.4255e-01
1.5708e+00 -2.7224e+05
```