DEFINITION MODULE RealArithmetic; (********************************************************) (* *) (* Procedures to perform addition, subtraction, *) (* etc., on real numbers. *) (* *) (* This module was originally introduced to *) (* get around a bug in FTL real arithmetic: *) (* the lack of re-entrancy. The module is now *) (* obsolescent, and should not be used in new *) (* programs. *) (* *) (* Programmer: P. Moylan *) (* Last edited: 20 March 1993 *) (* Status: Working *) (* *) (********************************************************) (************************************************************************) (* *) (* In principle, all of the features provided by this module are *) (* unnecessary, because they duplicate built-in features of Modula-2. *) (* The reason for providing this module is (a) to compensate for the *) (* fault in TRUNC in TopSpeed Modula-2; (b) to provide the missing *) (* LongTrunc operation; (c) to ease code portability: the original *) (* motivation for writing this module was because of a major bug in *) (* the real arithmetic of FTL Modula-2. *) (* *) (************************************************************************) PROCEDURE Add (VAR (*INOUT*) x: LONGREAL; y: LONGREAL); (* Computes x := x+y *) PROCEDURE Subtract (VAR (*INOUT*) x: LONGREAL; y: LONGREAL); (* Computes x := x-y *) PROCEDURE Multiply (VAR (*INOUT*) x: LONGREAL; y: LONGREAL); (* Computes x := x*y *) PROCEDURE Divide (VAR (*INOUT*) x: LONGREAL; y: LONGREAL); (* Computes x := x/y *) PROCEDURE Float (j: LONGCARD): LONGREAL; (* Converts cardinal to real. *) PROCEDURE Negate (VAR (*INOUT*) x: LONGREAL); (* Computes x := -x *) PROCEDURE Square (a: LONGREAL): LONGREAL; (* Returns a*a *) PROCEDURE Equal (x, y: LONGREAL): BOOLEAN; (* Tests the condition x = y *) PROCEDURE Greater (x, y: LONGREAL): BOOLEAN; (* Tests the condition x > y *) PROCEDURE GreaterOrEqual (x, y: LONGREAL): BOOLEAN; (* Tests the condition x >= y *) PROCEDURE LessThan (x, y: LONGREAL): BOOLEAN; (* Tests the condition x < y *) (************************************************************************) (* The above procedures place protection on individual operations. If *) (* instead you want to place critical section protection around a whole *) (* group of real operations, use the following two procedures. *) (************************************************************************) PROCEDURE ProtectReal; PROCEDURE UnProtectReal; END RealArithmetic.