```-- RealFns.mesa
-- Last Update by Stewart, September 28, 1980  11:57 PM
-- Copyright Xerox Corporation 1980

RealFns: DEFINITIONS =
BEGIN

Exp: PROC [REAL] RETURNS [REAL];
-- For an input argument n, returns en (e=2.718...).
-- Computed by continued fractions.

Log: PROC [base, arg: REAL] RETURNS [REAL];
-- Computes logarithm to the base base of arg.
-- Computed by Ln(arg)/Ln(base).

Ln: PROC [REAL] RETURNS [REAL];
-- Computes the natural logarithm (base e) of the input argument.

SqRt: PROC [REAL] RETURNS [REAL];
-- Calculates the square root of the input value by Newton's iteration.

Root: PROC [index, arg: REAL] RETURNS [REAL];
-- Calculates the index root of arg by e(Ln(arg)/index).

Power: PROC [base, exponent: REAL] RETURNS [REAL];
-- Calculates base to the exponent power by e(exponent*Ln(base)).

Sin: PROC [radians: REAL] RETURNS [sin: REAL];
SinDeg: PROC [degrees: REAL] RETURNS [sin: REAL];
Cos: PROC [radians: REAL] RETURNS [cos: REAL];
CosDeg: PROC [degrees: REAL] RETURNS [cos: REAL];
Tan: PROC [radians: REAL] RETURNS [tan: REAL];
TanDeg: PROC [degrees: REAL] RETURNS [tan: REAL];
-- Computes the trigonometric function by polynomial;
--   good to 7.33 decimal places.

ArcTan: PROC [y, x: REAL] RETURNS [radians: REAL];
ArcTanDeg: PROC [y, x: REAL] RETURNS [degrees: REAL];
-- Good to 8.7 decimal places.

-- AlmostZero returns TRUE if ABS[x] is smaller than 2↑distance.
AlmostZero: PROC [x: REAL, distance: [-126..127]] RETURNS [BOOLEAN];

-- AlmostEqual returns TRUE if ABS[x-y]/MAX[ABS[x],ABS[y]]
--   is smaller than 2↑distance.  That is, the exponent of the result
--   of the subtract must be ABS[distance] smaller than the larger
--   exponent of the operands.
AlmostEqual: PROC [y, x: REAL, distance: [-126..0]] RETURNS [BOOLEAN];

-- In both these procedures, distance should be negative!

END.

```