<> <> <> <> Real: DEFINITIONS = { <> NumberType: TYPE = {normal, zero, infinity, nan}; Extended: TYPE = RECORD [ type: NumberType, sign: BOOL, exp: INTEGER, frac: LONG CARDINAL]; <> RoundingMode: TYPE = {rn, rz, rm, rp}; <> <> <> <> NormalizationMode: TYPE = {warning, normalizing}; Mode: TYPE = RECORD [ nm: NormalizationMode _ warning, round: RoundingMode _ rn]; <> PlusZero: REAL = LOOPHOLE[(00000000000b).LONG]; MinusZero: REAL = LOOPHOLE[20000000000b]; PlusInfinity: REAL = LOOPHOLE[17740000000b]; MinusInfinity: REAL = LOOPHOLE[37740000000b]; TrapNonTrappingNaN: LONG CARDINAL = (1).LONG; TrapTrappingNaN: LONG CARDINAL = (2).LONG; <> Flag: TYPE = BOOL _ FALSE; Exception: TYPE = { fixOverflow, inexactResult, invalidOperation, divisionByZero, overflow, underflow}; ExceptionFlags: TYPE = PACKED ARRAY Exception OF Flag; NoExceptions: ExceptionFlags = ALL[FALSE]; <> RealException: SIGNAL [flags: ExceptionFlags]; RealToExtended: PROC [a: REAL] RETURNS [Extended]; ExtendedToReal: PROC [e: Extended] RETURNS [REAL]; Abs: PROC [a: REAL] RETURNS [REAL]; Negate: PROC [a: REAL] RETURNS [REAL]; PairToReal: PROC [fr: LONG INTEGER, exp10: INTEGER] RETURNS [REAL]; }.