﻿ s07aa Method
s07aa returns the value of the circular tangent, $\mathrm{tan} x$.

# Syntax

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

#### Parameters

x
Type: System..::..Double
On entry: the argument $x$ of the function.
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

s07aa returns the value of the circular tangent, $\mathrm{tan} x$.

# Description

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

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
The method has been called with an argument that is larger in magnitude than $F$; the default result returned is zero. The value of $F$ is given in the Users' Note for your implementation.
${\mathbf{ifail}}=2$
The method 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 method returns a value with the correct sign but a more or less arbitrary but large magnitude (see [Accuracy]). The value of $F$ is given in the Users' Note for your implementation.
${\mathbf{ifail}}=-9000$
An error occured, see message report.

# Accuracy

If $\delta$ and $\epsilon$ are the relative errors in the argument and result respectively, then in principle
 $ε≥2xsin 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 method must fail (error $2$).
If $N$ is odd and $\left|\theta \right|\le x{F}_{2}$ the method 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 method 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 method is called with a large argument. If $\left|x\right|>{F}_{1}$ the method fails (error $1$) and returns zero. (See the Users' Note for your implementation for specific values of ${F}_{1}$ and ${F}_{2}$.)

None.

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

Example program data: s07aae.d

Example program results: s07aae.r