<> <> <> DIRECTORY BitOps, Dragon, IO, QCard; DragonReal: CEDAR DEFINITIONS = BEGIN QINT: TYPE = RECORD [sign: BOOL, val: QCard.QCARD]; Real: TYPE = MACHINE DEPENDENT RECORD [ sign (0: 0.. 0): BOOL _ FALSE, exp (0: 1.. 8): [0..400B) _ 0, frac0 (0: 9..15): [0.. 20B) _ 0, frac1 (0:16..31): CARDINAL _ 0]; RealDbl: TYPE = MACHINE DEPENDENT RECORD [ sign (0: 0.. 0): BOOL _ FALSE, exp (0: 1..11): [0..4000B) _ 0, frac0 (0:12..15): [0.. 20B) _ 0, frac1 (0:16..31): CARDINAL _ 0, frac2 (0:32..47): CARDINAL _ 0, frac3 (0:48..63): CARDINAL _ 0]; RealFromINT: PROC [int: INT] RETURNS [Real]; RealDblFromQINT: PROC [int: QINT] RETURNS [RealDbl]; RealToINT: PROC [r: Real] RETURNS [type: NumberType, int: INT]; RealDblToQINT: PROC [r: RealDbl] RETURNS [type: NumberType, int: QINT]; RealFromDec: PROC [int: INT, exp10: INT] RETURNS [Real]; RealDblFromDec: PROC [int: QINT, exp10: INT] RETURNS [RealDbl]; RealToDec: PROC [r: REAL, precision: NAT _ DefaultSinglePrecision] RETURNS [type: NumberType, int: INT, exp10: INT]; RealDblToDec: PROC [r: RealDbl, precision: NAT _ DefaultDoublePrecision] RETURNS [type: NumberType, int: QINT, exp10: INT]; <<>> <> DefaultSinglePrecision: CARDINAL = 7; MaxSinglePrecision: CARDINAL = 9; DefaultDoublePrecision: CARDINAL = 15; MaxDoublePrecision: CARDINAL = 17; <> <> NumberType: TYPE = {normal, zero, infinity, nan, integer, decimal}; RealExt: TYPE = RECORD [ type: NumberType, sign: BOOL, exp: INT, double: BOOL, sticky: BOOL, sig: QCard.QCARD]; <> <<>> <> <<>> <> <> <> <> <> END.