RealFns: CEDAR DEFINITIONS = BEGIN Exp: PROC [REAL] RETURNS [REAL]; Ln: PROC [REAL] RETURNS [REAL]; Log: PROC [base, arg: REAL] RETURNS [REAL]; Power: PROC [base, exponent: REAL] RETURNS [REAL]; Root: PROC [index, arg: REAL] RETURNS [REAL]; SqRt: PROC [REAL] RETURNS [REAL]; 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]; ArcTan: PROC [y, x: REAL] RETURNS [radians: REAL]; ArcTanDeg: PROC [y, x: REAL] RETURNS [degrees: REAL]; CoTan: PROC [radians: REAL] RETURNS [cotan: REAL]; CoTanDeg: PROC [degrees: REAL] RETURNS [cotan: REAL]; ArcSin: PROC [x: REAL] RETURNS [ REAL]; ArcSinDeg: PUBLIC PROC [x: REAL] RETURNS [degrees: REAL]; ArcCos: PROC[x: REAL] RETURNS [REAL]; ArcCosDeg: PUBLIC PROC [x: REAL] RETURNS [degrees: REAL]; SinH: PROC [x: REAL] RETURNS [REAL]; CosH: PROC [x: REAL] RETURNS [REAL]; TanH: PROC [x: REAL] RETURNS [REAL]; CotH: PROC [x: REAL] RETURNS [REAL]; InvSinH: PROC [x: REAL] RETURNS [REAL]; InvCosH: PROC [x: REAL] RETURNS [REAL]; InvTanH: PROC [x: REAL] RETURNS [REAL]; InvCotH: PROC [x: REAL] RETURNS [REAL]; LnGamma: PROC [x: REAL] RETURNS [REAL]; Gamma: PROC [x: REAL] RETURNS [REAL]; J0: PROC [x: REAL] RETURNS [REAL]; J1: PROC [x: REAL] RETURNS [REAL]; Jn: PROC [n: INT, x: REAL] RETURNS [REAL]; Rational: TYPE ~ RECORD [numerator: INT, denominator: INT]; RationalFromReal: PROC [x: REAL, limit: INT ¬ INT.LAST] RETURNS [Rational]; AlmostZero: PROC [x: REAL, distance: [-126..127]] RETURNS [BOOL]; AlmostEqual: PROC [y, x: REAL, distance: [-126..0]] RETURNS [BOOL]; END.  RealFns.mesa Copyright Σ 1985, 1986, 1987, 1991 by Xerox Corporation. All rights reserved. Stewart, August 27, 1982 11:21 am E. McCreight, November 16, 1984 11:47:34 am PST (RealFnsExtras) Russ Atkinson (RRA) November 14, 1986 7:06:17 pm PST Doug Wyatt, January 15, 1987 1:14:03 pm PST Willie-s, August 6, 1991 1:05 pm PDT Exponent and logarithm functions For an input argument n, returns e^n (e=2.718...). Computed by continued fractions. Computes the natural logarithm (base e) of the input argument. Computes logarithm to the base base of arg. Computed by Ln(arg)/Ln(base). Calculates base to the exponent power by e(exponent*Ln(base)). Calculates the index root of arg by e(Ln(arg)/index). Calculates the square root of the input value by Newton's iteration. Trigonometric functions Computes the trigonometric functions by polynomial; good to 7.33 decimal places. Good to 8.7 decimal places. Hyperbolic circle functions Hyperbolic sine Hyperbolic cosine Hyperbolic tangent Hyperbolic cotangent ...defined for x >= 1.0, returns non-negative result ...defined for x IN (-1.0..1.0) ...defined for x NOT IN [-1.0..1.0] Gamma functions .. defined for x>0 .. defined for x>0; computed by Exp[LnGamma[x]] Gamma[x+1] = x! for integer x. Bessel functions Bessel function of first kind of order 0 Bessel function of first kind of order 1 Bessel function of first kind of order n Rational approximation ... computes the best rational approximation to a real using continued fractions. |numerator| <= limit, 0 < denominator <= limit. Approximate equality AlmostZero[x, distance] == ABS[x] < 2^distance AlmostEqual[y, x, distance] == NotNaN[x] AND NotNaN[y] AND ABS[x-y] <= MAX[ABS[x], ABS[y]] * 2^distance Notes: When either number is a Nan (not-a-number), then equality is never guaranteed, so FALSE is a conservative answer. Comparing anything against 0.0 can give surprising results using the above definition, since ABS[x-0] = MAX[ABS[x], ABS[0]], which implies that AlmostEqual[0, x, distance] is only true for distance = 0. Κ •NewlineDelimiter –(cedarcode) style™codešœ ™ Kšœ ΟeœC™NKšœ"™"Jšœ?™?K™4K™+K™$—K˜KšΠblœΟkœŸ ˜KšœŸ˜head™ š ΟnœŸœŸœŸœŸœ˜ Kšœ2™2Kšœ ™ K™—š  œŸœŸœŸœŸœ˜Kšœ>™>K™—š  œŸœ ŸœŸœŸœ˜+Kšœ+™+Kšœ™K™—š  œŸœŸœŸœŸœ˜2Kšœ>™>K™—š  œŸœŸœŸœŸœ˜-Kšœ5™5K™—š  œŸœŸœŸœŸœ˜!KšœD™DK™——™Kš  œŸœ ŸœŸœŸœ˜.š  œŸœ ŸœŸœŸœ˜1K˜—Kš  œŸœ ŸœŸœŸœ˜.š  œŸœ ŸœŸœŸœ˜1K˜—Kš  œŸœ ŸœŸœŸœ˜.š  œŸœ ŸœŸœŸœ˜1Kšœ3™3Kšœ™K™—Kš  œŸœŸœŸœ Ÿœ˜2š   œŸœŸœŸœ Ÿœ˜5Kšœ™—K˜Kš  œŸœ ŸœŸœ Ÿœ˜2š  œŸœ ŸœŸœ Ÿœ˜5K˜—Kš  œŸœŸœŸœŸœ˜'š   œŸœŸœŸœŸœ Ÿœ˜9K˜—Kš  œŸœŸœŸœŸœ˜%Kš   œŸœŸœŸœŸœ Ÿœ˜9—šœ™š ΟbœŸœŸœŸœŸœ˜$Jšœ™K˜—š ‘œŸœŸœŸœŸœ˜$Jšœ™K˜—š ‘œŸœŸœŸœŸœ˜$Jšœ™K˜—š ΠbnœŸœŸœŸœŸœ˜$Jšœ™K˜—š  œŸœŸœŸœŸœ˜'K˜—š  œŸœŸœŸœŸœ˜'Jšœ4™4J™—š  œŸœŸœŸœŸœ˜'JšœŸœ ™J™—š  œŸœŸœŸœŸœ˜'JšœŸœŸœ ™#J™——šœ™š  œŸœŸœŸœŸœ˜'J™K˜—š ’œŸœŸœŸœŸœ˜%Jšœ Οc™/J™J™——šœ™š  œŸœŸœŸœŸœ˜"Jšœ(™(J™—š  œŸœŸœŸœŸœ˜"Jšœ(™(J™—š  œŸœŸœŸœŸœŸœ˜*Jšœ(™(J™——™š œ ŸœŸœ ŸœŸœ˜;K˜—š œŸœŸœ ŸœŸœŸœŸœ ˜KJšœQ™QJšœ0™0J™——™š   œŸœŸœŸœŸœ˜Ašœ™Kšœ™—K™—š   œŸœŸœŸœŸœ˜Cšœ™šœ Ÿœ Ÿ™KšŸœ ŸœŸœŸœ™,——™KšœRŸœ™qKš œ]ŸœŸœŸœŸœS™Κ—K™——K˜KšŸœ˜—…—ήν