``````{
MSGID: 2:228/406 68DEA672
Here is the unit of trigonometric and hyperbolic
real functions:
}

UNIT trighyp;
{ Juhani Kaukoranta, Sysop of Pooki MBBS, Finland
Pooki MBBS 358-82-221 782 }

INTERFACE

FUNCTION TAN(x:Real):Real;
FUNCTION COT(x:Real): Real;
FUNCTION SEC(x:Real): Real;
FUNCTION COSEC(x:Real): Real;
FUNCTION SINH(x:Real): Real;
FUNCTION COSH(x:Real): Real;
FUNCTION TANH(x:Real): Real;
FUNCTION COTH(x:Real): Real;
FUNCTION SECH(x:Real): Real;
FUNCTION COSECH(x:Real): Real;
FUNCTION ARCSIN(x:Real):Real;
FUNCTION ARCCOS(x:Real):Real;
FUNCTION ARCCOT(x:Real): Real;
FUNCTION ARCSEC(x:Real): Real;
FUNCTION ARCCOSEC(x:Real): Real;
FUNCTION ARCSINH(x:Real): Real;
FUNCTION ARCCOSH(x:Real): Real;
FUNCTION ARCTANH(x:Real): Real;
FUNCTION ARCCOTH(x:Real): Real;

IMPLEMENTATION

FUNCTION TAN(x: Real): Real;
{ argument x is in radians }
BEGIN
TAN := SIN(x)/COS(x);
END;

FUNCTION COT(x:Real): Real;
{ cotangent, x is in radians }
BEGIN
COT := 1/TAN(x);
END;

FUNCTION SEC(x:Real): Real;
{ secant, x is in radians }
BEGIN
SEC := 1/COS(x);
END;

FUNCTION COSEC(x:Real): Real;
{ cosecant, x is in radians }
BEGIN
COSEC := 1/SIN(x);
END;

FUNCTION SINH(x:real):Real;
{ hyperbolic sin }
BEGIN
SINH := (EXP(x)-EXP(-x))/2;
END;

FUNCTION COSH(x:Real): Real;
{ hyperbolic cos }
BEGIN
COSH := (EXP(x)+EXP(-x))/2;
END;

FUNCTION TANH(x:Real): REAL;
{ hyperbolic tan }
BEGIN
TANH := SINH(x)/COSH(x);
END;

FUNCTION COTH(x: Real): Real;
{ hyperbolic cotangent }
BEGIN
COTH :=SINH(x)/COSH(x);
END;

FUNCTION SECH(x:Real): Real;
{ hyperbolic secant }
BEGIN
SECH := 1/COSH(x);
END;

FUNCTION COSECH(x:Real): Real;
{ hyperbolic cosecant }
BEGIN
COSECH := 1/SINH(x);
END;

FUNCTION ARCSIN(x:Real):Real;
{ inverse of sin, return value is in radians }
BEGIN
IF ABS(x)=1.0  THEN
ARCSIN := x*Pi/2
ELSE
ARCSIN := ARCTAN(x/SQRT(-SQR(x)+1));
END;

FUNCTION ARCCOS(x:Real):Real;
{ inverse of cos, return value is in radians }
BEGIN
IF x = 1.0 THEN
ARCCOS := 0
ELSE IF x = -1.0 THEN
ARCCOS :=Pi
ELSE
ARCCOS := -ARCTAN(x/SQRT(-SQR(x)+1))+Pi/2;
END;

FUNCTION ARCCOT(x:Real): Real;
{ inverse of cot, return value is in radians }
BEGIN
ARCCOT := ARCTAN(1/x);
END;

FUNCTION ARCSEC(x:Real): Real;
{ inverse of secant, return value is in radians }
BEGIN
ARCSEC := ARCCOS(1/x);
END;

FUNCTION ARCCOSEC(x:Real): Real;
{ inverse of cosecant, return value is in radians }
BEGIN
ARCCOSEC := ARCSIN(1/x);
END;

FUNCTION ARCSINH(x:Real): Real;
{ inverse of hyperbolic sin }
BEGIN
ARCSINH := LN(x + SQRT(x*x+1));
END;

FUNCTION ARCCOSH(x:Real): Real;
{ inverse of hyperbolic cos}
BEGIN
ARCCOSH := LN(x + SQRT(x*x-1));
END;

FUNCTION ARCTANH(x:Real): Real;
{ inverse of hyperbolic tan }
BEGIN
ARCTANH := LN((1+x)/(1-x))/2;
END;

FUNCTION ARCCOTH(x:Real): REAL;
{ inverse of hyperbolic cotangent }
BEGIN
ARCCOTH := LN((x+1)/(x-1))/2;
END;

END. { of unit }

``````