-- DragonRealOps.mesa
-- Last Modified: Stewart, August 27, 1982 11:03 am
DIRECTORY
Real USING [ExceptionFlags, UsualExceptions];
RealOps: CEDAR DEFINITIONS =
BEGIN
-- See IEEE floating point standard for more information.
-- Modes
-- rn: Round to nearest (unbiased).
-- rz: Round to zero (truncate).
-- rp: Round to plus infinity (round up).
-- rm: Round to minus infinity (round down).
RoundingMode: TYPE = MACHINE DEPENDENT{rn, rz, rm, rp};
DefaultRoundingMode: RoundingMode = rn;
InfinityMode: TYPE = MACHINE DEPENDENT{projective, affine};
DefaultInfinityMode: InfinityMode = projective;
-- Affine mode has two infinities (positive and negative).
-- Projective mode has only one (unsigned).
NormalizationMode: TYPE = MACHINE DEPENDENT{warning, normalizing};
DefaultNormalizationMode: NormalizationMode = warning;
-- Warning mode recognizes operand's unnormalized character.
-- Normalizing mode (internally) normalizes operands before operating on them.
Mode: TYPE = MACHINE DEPENDENT RECORD [
blank(0:0..5): [0..77B] ← NULL,
im(0:6..6): InfinityMode ← projective,
nm(0:7..7): NormalizationMode ← warning,
round(0:8..9): RoundingMode ← rn,
traps(0:10..15): Real.ExceptionFlags ← Real.UsualExceptions];
DefMode: Mode =
[blank: 0, im: projective, nm: warning,
round: rn, traps: Real.UsualExceptions];
FixMode: Mode =
[blank: 0, im: projective, nm: warning,
round: rz, traps: Real.UsualExceptions];
-- The Mode applies only to operations called through this interface.
SetMode: PROC [new: Mode] RETURNS [old: Mode];
GetMode: PROC RETURNS [Mode];
-- Operations
FAdd: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [REAL];
FSub: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [REAL];
FMul: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [REAL];
FDiv: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [REAL];
FComp: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [INTEGER];
FRem: PROC [a, b: REAL, m: Mode ← DefMode] RETURNS [REAL];
Float: PROC [a: LONG INTEGER, m: Mode ← DefMode] RETURNS [REAL];
RoundLI: PROC [a: REAL, m: Mode ← DefMode] RETURNS [LONG INTEGER];
RoundI: PROC [a: REAL, m: Mode ← DefMode] RETURNS [INTEGER];
RoundC: PROC [a: REAL, m: Mode ← DefMode] RETURNS [CARDINAL];
FScale: PROC [a: REAL, scale: INTEGER, m: Mode ← DefMode] RETURNS [REAL];
SqRt: PROC [a: REAL, m: Mode ← DefMode] RETURNS [REAL];
InitReals: PROC;
END.
July 5, 1980 3:16 PM; Stewart, created
September 28, 1980 8:06 PM; Stewart, Deleted individual mode procs.
October 27, 1980 11:23 AM; Stewart, Fixed Mode type for LIB use.
June 3, 1982 11:07 am; Stewart, added FScale, SqRt