\section{Elementary Functions}

\begin{Operator}{ACOS}
\index{arccosine}
The \name{acos} operator returns the arccosine of its argument.

\begin{Syntax}
\name{acos}\(\meta{expression}\) or \name{acos} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
acos(ab);                  &          ACOS(AB) \\
acos 15;                   &          ACOS(15) \\
df(acos(x*y),x);           &         \rfrac{SQRT( - X^{2}*Y^{2} + 1)*Y}{X^{2}*Y^{2} - 1} \\
on rounded; \\
res := acos(sqrt(2)/2);    &          RES := 0.785398163397 \\
res-pi/4;                  &          0
\end{Examples}

\begin{Comments}
An explicit numeric value is not given unless the switch \nameref{rounded} is
on and the argument has an absolute numeric value less than or equal to 1.
\end{Comments}
\end{Operator}


\begin{Operator}{ACOSH}
\index{hyperbolic arccosine}
\name{acosh} represents the hyperbolic arccosine of its argument.  It takes
an arbitrary scalar expression as its argument. The derivative of
\name{acosh} is known to the system.  Numerical values may also be found by
turning on the switch \nameref{rounded}.

\begin{Syntax}
\name{acosh}\(\meta{expression}\) or \name{acosh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
acosh a;                   &       ACOSH(A) \\
acosh(0);                  &       ACOSH(0) \\
df(acosh(a**2),a);         &       \rfrac{2*SQRT(A^{4} - 1)*A}{A^{4} - 1} \\
int(acosh(x),x);           &       INT(ACOSH(X),X)
\end{Examples}
\begin{Comments}
You may attach functionality by defining \name{acosh} to be the inverse of
\name{cosh}.  This is done by the commands
\begin{verbatim}
        put('cosh,'inverse,'acosh);
        put('acosh,'inverse,'cosh);
\end{verbatim}
You can write a procedure to attach integrals or other
functions to \name{acosh}.  You may wish to add a check to see that its
argument is properly restricted.
\end{Comments}
\end{Operator}


\begin{Operator}{ACOT}
\index{arccotangent}
\name{acot} represents the arccotangent of its argument.  It takes
an arbitrary scalar expression as its argument. The derivative of
\name{acot} is known to the system.  Numerical values may also be found by
turning on the switch \nameref{rounded}.

\begin{Syntax}
\name{acot}\(\meta{expression}\) or \name{acot} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.
You can add functionality yourself with \name{let} and procedures.

\end{Operator}


\begin{Operator}{ACOTH}
\index{hyperbolic cotangent}
\name{acoth} represents the inverse hyperbolic cotangent of its argument.
It takes an arbitrary scalar expression as its argument.  The derivative
of \name{acoth} is known to the system.  Numerical values may also be found
by turning on the switch \nameref{rounded}.

\begin{Syntax}
\name{acoth}\(\meta{expression}\) or \name{acoth} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array,
matrix or vector expression. \meta{simple\_expression} must be a single
identifier or begin with a prefix operator name.  You can add
functionality yourself with \name{let} and procedures.
\end{Operator}


\begin{Operator}{ACSC}
\index{arccosecant}
The \name{acsc} operator returns the arccosecant of its argument.

\begin{Syntax}
\name{acsc}\(\meta{expression}\) or \name{acsc} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
acsc(ab);                  &          ACSC(AB) \\
acsc 15;                   &          ACSC(15) \\
df(acsc(x*y),x);           &         \rfrac{-SQRT(X^{2}*Y^{2} - 1)}{X*(X^{2}*Y^{2} - 1)} \\
on rounded; \\
res := acsc(2/sqrt(3));    &          RES := 1.0471975512 \\
res-pi/3;                  &          0
\end{Examples}

\begin{Comments}
An explicit numeric value is not given unless the switch \name{rounded} is
on and the argument has an absolute numeric value less than or equal to 1.
\end{Comments}
\end{Operator}


\begin{Operator}{ACSCH}
\index{arccosecant}
The \name{acsch} operator returns the hyperbolic arccosecant of its argument.

\begin{Syntax}
\name{acsch}\(\meta{expression}\) or \name{acsch} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
acsch(ab);                 &          ACSCH(AB) \\
acsch 15;                  &          ACSCH(15) \\
df(acsch(x*y),x);           &         \rfrac{-SQRT(X^{2}*Y^{2} + 1)}{X*(X^{2}*Y^{2} + 1)} \\
on rounded; \\
res := acsch(3);           &          RES := 0.327450150237
\end{Examples}

\begin{Comments}
An explicit numeric value is not given unless the switch \name{rounded} is
on and the argument has an absolute numeric value less than or equal to 1.
\end{Comments}
\end{Operator}


\begin{Operator}{ASEC}
\index{arccosecant}
The \name{asec} operator returns the arccosecant of its argument.

\begin{Syntax}
\name{asec}\(\meta{expression}\) or \name{asec} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
asec(ab);                  &          ASEC(AB) \\
asec 15;                   &          ASEC(15) \\
df(asec(x*y),x);           &         \rfrac{SQRT(X^{2}*Y^{2} - 1)}{X*(X^{2}*Y^{2} - 1)} \\
on rounded; \\
res := asec sqrt(2);       &          RES := 0.785398163397 \\
res-pi/4;                  &          0
\end{Examples}

\begin{Comments}
An explicit numeric value is not given unless the switch \name{rounded} is
on and the argument has an absolute numeric value greater or equal to 1.
\end{Comments}
\end{Operator}


\begin{Operator}{ASECH}
\index{hyperbolic arccosecant}
\name{asech} represents the hyperbolic arccosecant of its argument.  It takes
an arbitrary scalar expression as its argument. The derivative of
\name{asech} is known to the system.  Numerical values may also be found by
turning on the switch \nameref{rounded}.

\begin{Syntax}
\name{asech}\(\meta{expression}\) or \name{asech} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
asech a;                   &       ASECH(A) \\
asech(1);                  &       0 \\
df(acosh(a**2),a);         &       \rfrac{2*SQRT(- A^{4} + 1)}{A*(A^{4} - 1)} \\
int(asech(x),x);           &       INT(ASECH(X),X)
\end{Examples}
\begin{Comments}
You may attach functionality by defining \name{asech} to be the inverse of
\name{sech}.  This is done by the commands
\begin{verbatim}
        put('sech,'inverse,'asech);
        put('asech,'inverse,'sech);
\end{verbatim}
You can write a procedure to attach integrals or other
functions to \name{asech}.  You may wish to add a check to see that its
argument is properly restricted.
\end{Comments}
\end{Operator}


\begin{Operator}{ASIN}
\index{arcsine}
The \name{asin} operator returns the arcsine of its argument.

\begin{Syntax}
\name{asin}\(\meta{expression}\) or \name{asin} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
asin(givenangle);          &      ASIN(GIVENANGLE) \\
asin(5);                   &      ASIN(5) \\
df(asin(2*x),x);           &      - \rfrac{2*SQRT( - 4*X^{2} + 1))}{4*X^{2} - 1} \\
on rounded; \\
asin .5;                   &      0.523598775598 \\
asin(sqrt(3));             &      ASIN(1.73205080757) \\
asin(sqrt(3)/2);           &      1.04719755120 \\
\end{Examples}

\begin{Comments}
A numeric value is not returned by \name{asin} unless the switch
\name{rounded} is on and its argument has an absolute value less than or
equal to 1.
\end{Comments}
\end{Operator}


\begin{Operator}{ASINH}
\index{hyperbolic arcsine}
The \name{asinh} operator returns the hyperbolic arcsine of its argument.
The derivative of \name{asinh} and some simple transformations are known
to the system.

\begin{Syntax}
\name{asinh}\(\meta{expression}\) or \name{asinh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
asinh d;                   &       ASINH(D) \\
asinh(1);                  &       ASINH(1) \\
df(asinh(2*x),x);          &       \rfrac{2*SQRT(4*X^{2} + 1))}{4*X^{2} + 1} \\
\end{Examples}

\begin{Comments}
You may attach further functionality by defining \name{asinh} to be the
inverse of \name{sinh}.  This is done by the commands
\begin{verbatim}
        put('sinh,'inverse,'asinh);
        put('asinh,'inverse,'sinh);
\end{verbatim}
A numeric value is not returned by \name{asinh} unless the switch
\name{rounded} is on and its argument evaluates to a number.
\end{Comments}
\end{Operator}


\begin{Operator}{ATAN}
\index{arctangent}
The \name{atan} operator returns the arctangent of its argument.

\begin{Syntax}
\name{atan}\(\meta{expression}\) or \name{atan} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
atan(middle);              &      ATAN(MIDDLE) \\
on rounded; \\
atan 45;                   &      1.54857776147 \\
off rounded; \\
int(atan(x),x);            &      \rfrac{2*ATAN(X)*X - LOG(X^{2} + 1)}{2} \\
df(atan(y**2),y);          &      \rfrac{2*Y}{Y^{4} + 1}
\end{Examples}

\begin{Comments}
A numeric value is not returned by \name{atan} unless the switch
\nameref{rounded} is on and its argument evaluates to a number.
\end{Comments}
\end{Operator}


\begin{Operator}{ATANH}
\index{hyperbolic arctangent}
The \name{atanh} operator returns the hyperbolic arctangent of its argument.
The derivative of \name{asinh} and some simple transformations are known
to the system.

\begin{Syntax}
\name{atanh}\(\meta{expression}\) or \name{atanh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression.  \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
atanh aa;                  &       ATANH(AA) \\
atanh(1);                  &       ATANH(1) \\
df(atanh(x*y),y);          &       \rfrac{- X}{X^{2}*Y^{2} - 1}
\end{Examples}

\begin{Comments}
A numeric value is not returned by \name{asinh} unless the switch
\name{rounded} is on and its argument evaluates to a number.
You may attach additional functionality by defining \name{atanh} to be the
inverse of \name{tanh}.  This is done by the commands

\begin{verbatim}
        put('tanh,'inverse,'atanh);
        put('atanh,'inverse,'tanh);
\end{verbatim}
\end{Comments}
\end{Operator}

\begin{Operator}{ATAN2}

\begin{Syntax}
\name{atan2}\(\meta{expression},\meta{expression}\)
\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression.  In
\nameref{rounded} mode, if a numerical value exists, \name{atan2} returns
the principal value of the arc tangent of the second argument divided by
the first in the range [-pi,+pi] radians, using the signs of both
arguments to determine the quadrant of the return value.  An expression in
terms of \name{atan2} is returned in other cases.

\begin{Examples}
atan2(3,2);                  &        ATAN2(3,2); \\
on rounded; \\
atan2(3,2);                  &        0.982793723247 \\
atan2(a,b);                  &        ATAN2(A,B); \\
atan2(1,0);                  &        1.57079632679
\end{Examples}
\begin{Comments}
\name{atan2} returns a numeric value only if \nameref{rounded} is on. Then
\name{atan2} is calculated to the current degree of floating point precision.

\end{Comments}
\end{Operator}


\begin{Operator}{COS}
The \name{cos} operator returns the cosine of its argument.

\begin{Syntax}
\name{cos}\(\meta{expression}\) or \name{cos} \meta{simple\_expression}
\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression,
\meta{simple\_expression} is a single identifier or begins with a prefix
operator name.

\begin{Examples}


cos abc;                     &        COS(ABC) \\

cos(pi);                     &        -1 \\

cos 4;                       &        COS(4) \\

on rounded; \\

cos(4);                      &        - 0.653643620864 \\

cos log 5;                   &        - 0.0386319699339
\end{Examples}
\begin{Comments}
\name{cos} returns a numeric value only if \nameref{rounded} is on. Then the
cosine is calculated to the current degree of floating point precision.

\end{Comments}
\end{Operator}


\begin{Operator}{COSH}
\index{hyperbolic cosine}
The \name{cosh} operator returns the hyperbolic cosine of its argument.
The derivative of \name{cosh} and some simple transformations are known
to the system.

\begin{Syntax}
\name{cosh}\(\meta{expression}\) or \name{cosh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression. \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}

cosh b;                      &             COSH(B) \\

cosh(0);                     &             1 \\

df(cosh(x*y),x);             &             SINH(X*Y)*Y \\

int(cosh(x),x);              &             SINH(X)
\end{Examples}

\begin{Comments}
You may attach further functionality by defining its inverse (see
\nameref{acosh}).
A numeric value is not returned by \name{cosh} unless the switch
\nameref{rounded} is on and its argument evaluates to a number.

\end{Comments}
\end{Operator}


\begin{Operator}{COT}
\name{cot} represents the cotangent of its argument.  It takes an arbitrary
scalar expression as its argument. The derivative of \name{acot} and some
simple properties are known to the system.

\begin{Syntax}
\name{cot}\(\meta{expression}\) or \name{cot} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression.  \meta{simple\_expression}
must be a single identifier or begin with a prefix operator name.

\begin{Examples}
cot(a)*tan(a);               &         COT(A)*TAN(A)) \\
cot(1);                      &         COT(1) \\
df(cot(2*x),x);              &         - 2*(COT(2*X)^{2}  + 1)
\end{Examples}
\begin{Comments}
Numerical values of expressions involving \name{cot} may be found by
turning on the switch \nameref{rounded}.

\end{Comments}
\end{Operator}


\begin{Operator}{COTH}
\index{hyperbolic cotangent}
The \name{coth} operator returns the hyperbolic cotangent of its argument.
The derivative of \name{coth} and some simple transformations are known
to the system.

\begin{Syntax}
\name{coth}\(\meta{expression}\) or \name{coth} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression.  \meta{simple\_expression}
must be a single identifier or begin with a prefix operator name.

\begin{Examples}
df(coth(x*y),x);             &      - Y*(COTH(X*Y)^{2}  - 1) \\

coth acoth z;                &      Z
\end{Examples}

\begin{Comments}
You can write \nameref{let} statements and procedures to add further
functionality to \name{coth} if you wish.  Numerical values of expressions
involving \name{coth} may also be found by turning on the switch
\nameref{rounded}.

\end{Comments}
\end{Operator}

\begin{Operator}{CSC}
\index{cosecant}
The \name{csc} operator returns the cosecant of its argument.
The derivative of \name{csc} and some simple transformations are known
to the system.

\begin{Syntax}
\name{csc}\(\meta{expression}\) or \name{csc} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression.  \meta{simple\_expression}
must be a single identifier or begin with a prefix operator name.

\begin{Examples}

csc(q)*sin(q);               &       CSC(Q)*SIN(Q) \\

df(csc(x*y),x);              &       -COT(X*Y)*CSC(X*Y)*Y
\end{Examples}

\begin{Comments}
You can write \nameref{let} statements and procedures to add further
functionality to \name{csc} if you wish.  Numerical values of expressions
involving \name{csc} may also be found by turning on the switch
\nameref{rounded}.

\end{Comments}
\end{Operator}


\begin{Operator}{CSCH}
\index{hyperbolic cosecan}
The \name{cosh} operator returns the hyperbolic cosecant of its argument.
The derivative of \name{csch} and some simple transformations are known
to the system.

\begin{Syntax}
\name{csch}\(\meta{expression}\) or \name{csch} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression. \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}

csch b;                      &             CSCH(B) \\

csch(0);                     &             0 \\

df(csch(x*y),x);             &             - COTH(X*Y)*CSCH(X*Y)*Y \\

int(csch(x),x);              &             INT(CSCH(X),X)
\end{Examples}

\begin{Comments}
% You may attach further functionality by defining its inverse (see
% \nameref{acsch}).
A numeric value is not returned by \name{csch} unless the switch
\nameref{rounded} is on and its argument evaluates to a number.
\end{Comments}
\end{Operator}


\begin{Operator}{ERF}
\index{error function}
The \name{erf} operator represents the error function, defined by
\begin{TEX}
\begin{displaymath}
erf(x) = {2\over \sqrt{\pi}} \int{e^{-x^2}\,dx}
\end{displaymath}
\end{TEX}
\begin{INFO}
erf(x) = (2/sqrt(pi))*int(e^(-x^2),x)
\end{INFO}

A limited number of its properties are known to the system, including the
fact that it is an odd function.  Its derivative is known, and from this,
some integrals may be computed.  However, a complete integration procedure
for this operator is not currently included.

\begin{Examples}
erf(0);                      &    0 \\
erf(-a);                     &    - ERF(A) \\
df(erf(x**2),x);             &    \rfrac{4*SQRT(PI)*X}{E^{X^{4}}*PI} \\\\
int(erf(x),x);               &    \rfrac{E^{X^{2}}*ERF(X)*PI*X + SQRT(PI)}{E^{X^{2}}*PI}
\end{Examples}

\end{Operator}


\begin{Operator}{EXP}
\index{exponential function}
The \name{exp} operator returns \name{e} raised to the power of its argument.
\begin{Syntax}
\name{exp}\(\meta{expression}\) or \name{exp} \meta{simple\_expression}
\end{Syntax}

\meta{expression} can be any valid REDUCE scalar expression.
\meta{simple\_expression} must be a single identifier or begin with a
prefix operator.

\begin{Examples}
exp(sin(x));                 &   E^{SIN X} \\
exp(11);                     &   E^{11} \\
on rounded; \\
exp sin(pi/3);               &   2.37744267524
\end{Examples}
\begin{Comments}
Numeric values are returned only when \name{rounded} is on.
The single letter \name{e} with the exponential operator \name{^} or
\name{**} may be substituted for \name{exp} without change of function.
\end{Comments}
\end{Operator}


\begin{Operator}{SEC}
The \name{sec} operator returns the secant of its argument.

\begin{Syntax}
\name{sec}\(\meta{expression}\) or \name{sec} \meta{simple\_expression}
\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression,
\meta{simple\_expression} is a single identifier or begins with a prefix
operator name.

\begin{Examples}


sec abc;                     &        SEC(ABC) \\

sec(pi);                     &        -1 \\

sec 4;                       &        SEC(4) \\

on rounded; \\

sec(4);                      &        - 1.52988565647 \\

sec log 5;                   &        - 25.8852966005
\end{Examples}
\begin{Comments}
\name{sec} returns a numeric value only if \nameref{rounded} is on. Then the
secant is calculated to the current degree of floating point precision.
\end{Comments}
\end{Operator}


\begin{Operator}{SECH}
\index{hyperbolic secant}
The \name{sech} operator returns the hyperbolic secant of its argument.

\begin{Syntax}
\name{sech}\(\meta{expression}\) or \name{sech} \meta{simple\_expression}
\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression,
\meta{simple\_expression} is a single identifier or begins with a prefix
operator name.

\begin{Examples}
sech abc;                    &        SECH(ABC) \\

sech(0);                     &        1 \\

sech 4;                      &        SECH(4) \\

on rounded; \\

sech(4);                     &        0.0366189934737 \\

sech log 5;                  &        0.384615384615
\end{Examples}
\begin{Comments}
\name{sech} returns a numeric value only if \nameref{rounded} is on. Then the
expression is calculated to the current degree of floating point precision.
\end{Comments}
\end{Operator}


\begin{Operator}{SIN}
\index{sine}
The \name{sin} operator returns the sine of its argument.
\begin{Syntax}
\name{sin}\(\meta{expression}\) or \name{sin} \meta{simple\_expression}
\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression,
\meta{simple\_expression} is a single identifier or begins with a prefix
operator name.

\begin{Examples}
sin aa;                      &        SIN(AA) \\
sin(pi/2);                   &        1 \\
on rounded; \\
sin 3;                       &        0.14112000806 \\
sin(pi/2);                   &        1.0
\end{Examples}
\begin{Comments}
\name{sin} returns a numeric value only if \name{rounded} is on.
Then the sine is calculated to the current degree of floating point precision.
The argument in this case is assumed to be in radians.
\end{Comments}
\end{Operator}


\begin{Operator}{SINH}
\index{hyperbolic sine}
The \name{sinh} operator returns the hyperbolic sine of its argument.
The derivative of \name{sinh} and some simple transformations are known
to the system.

\begin{Syntax}
\name{sinh}\(\meta{expression}\) or \name{sinh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression. \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}

sinh b;                      &             SINH(B) \\

sinh(0);                     &             0 \\
df(sinh(x**2),x);            &          2*COSH(X^{2})*X \\
int(sinh(4*x),x);            &          \rfrac{COSH(4*X)}{4} \\
on rounded; \\
sinh 4; & 27.2899171971
\end{Examples}

\begin{Comments}
You may attach further functionality by defining its inverse (see
\nameref{asinh}).
A numeric value is not returned by \name{sinh} unless the switch
\nameref{rounded} is on and its argument evaluates to a number.
\end{Comments}
\end{Operator}


\begin{Operator}{TAN}
The \name{tan} operator returns the tangent of its argument.
\begin{Syntax}
\name{tan}\(\meta{expression}\) or \name{tan} \meta{simple\_expression}

\end{Syntax}

\meta{expression} is any valid scalar REDUCE expression,
\meta{simple\_expression} is a single identifier or begins with a prefix
operator name.

\begin{Examples}
tan a;                       &        TAN(A) \\
tan(pi/5);                   &        TAN(\rfrac{PI}{5}) \\
on rounded;
tan(pi/5);                   &        0.726542528005
\end{Examples}
\begin{Comments}
\name{tan} returns a numeric value only if \name{rounded} is on.  Then the
tangent is calculated to the current degree of floating point accuracy.

When \nameref{rounded} is on,
no check is made to see if the argument of \name{tan} is a multiple of
$\pi/2$, for which the tangent goes to positive or negative infinity.
(Of course, since REDUCE uses a fixed-point representation of $\pi/2$,
it produces a large but not infinite number.)  You need to make a check for
multiples of $\pi/2$ in any program you use that might possibly ask
for the tangent of such a quantity.
\end{Comments}
\end{Operator}


\begin{Operator}{TANH}
\index{hyperbolic tangent}
The \name{tanh} operator returns the hyperbolic tangent of its argument.
The derivative of \name{tanh} and some simple transformations are known
to the system.

\begin{Syntax}
\name{tanh}\(\meta{expression}\) or \name{tanh} \meta{simple\_expression}
\end{Syntax}

\meta{expression} may be any scalar REDUCE expression, not an array, matrix or
vector expression. \meta{simple\_expression} must be a single identifier or
begin with a prefix operator name.

\begin{Examples}
tanh b;                      &          TANH(B) \\
tanh(0);                     &          0 \\
df(tanh(x*y),x);             &          Y*( - TANH(X*Y)^{2} + 1) \\
int(tanh(x),x);              &          LOG(E^{2*X} + 1) - X \\
on rounded; tanh 2;          &          0.964027580076
\end{Examples}

\begin{Comments}
You may attach further functionality by defining its inverse (see
\nameref{atanh}).
A numeric value is not returned by \name{tanh} unless the switch
\nameref{rounded} is on and its argument evaluates to a number.
\end{Comments}
\end{Operator}


