<> <> DIRECTORY Rope USING [ROPE], IO USING [STREAM, PutRope], BigCardinals; RatNums: CEDAR DEFINITIONS IMPORTS IO = BEGIN OPEN BC: BigCardinals; <<***** Data Structure *****>> Sign: TYPE = { NEGATIVE, ZERO, POSITIVE }; RatNum: TYPE = RECORD [sign: Sign, numerator, denominator: BC.BigCARD ]; <> <<***** Basic Arithmetic *****>> RatNumAdd: PROC [in1, in2: RatNum] RETURNS [out: RatNum]; RatNumNegate: PROC [in: RatNum] RETURNS [out: RatNum]; RatNumABS: PROC [in: RatNum] RETURNS [out: RatNum]; RatNumSubtract: PROC [in1, in2: RatNum] RETURNS [RatNum]; RatNumMultiply: PROC [in1, in2: RatNum] RETURNS [out: RatNum]; RatNumInverse: PROC [in: RatNum] RETURNS [out: RatNum]; <> RatNumDivide: PROC [dividend, divisor: RatNum] RETURNS [RatNum]; <<***** Constructor Routines *****>> RatNumFromBigCards: PROC [sign: INTEGER[-1..1], num, den: BC.BigCARD] RETURNS [out: RatNum]; RatNumFromSmallCards: PROC [sign: INTEGER[-1..1], num, den: CARDINAL] RETURNS [out: RatNum]; MakeRatNumZero: PROC RETURNS [out: RatNum]; <> <<>> <<>> <<***** Conversion and I/O Routines *****>> <<>> RatNumFromREALRope: PROC [in: Rope.ROPE] RETURNS [RatNum]; <> <<>> RatNumToRatRope: PROC [in: RatNum, reuse: BOOLEAN _ FALSE, showDenomOne: BOOL _ FALSE] RETURNS [Rope.ROPE]; <> RatNumFromREAL: PROC [in: REAL] RETURNS [RatNum]; <> RatNumToREAL: PROC [in: RatNum, reuse: BOOLEAN _ FALSE] RETURNS [REAL]; <> ReadRatNum: PROC [in: IO.STREAM] RETURNS [out: RatNum, ok: BOOL _ TRUE]; WriteRatNum: PROC [stream: IO.STREAM, in: RatNum] = INLINE { IO.PutRope[ stream, RatNumToRatRope[in] ] }; <<***** Comparison *****>> RatNumRelation: TYPE = {ratLess, ratEqual, ratGreater}; RatNumCompare: PROC [in1, in2: RatNum] RETURNS [RatNumRelation]; RatNumRelationToRope: PROC [inRelation: RatNumRelation] RETURNS[Rope.ROPE]; RatNumGreater: PROC [in1, in2: RatNum] RETURNS [BOOLEAN]; RatNumEqual: PROC [in1, in2: RatNum] RETURNS [BOOLEAN]; RatNumLess: PROC [in1, in2: RatNum] RETURNS [BOOLEAN]; RatNumPositive: PROC [in: RatNum] RETURNS [BOOLEAN]; <> RatNumZero: PROC [in: RatNum] RETURNS [BOOLEAN]; <> RatNumNegative: PROC [in: RatNum] RETURNS [BOOLEAN]; <> RatNumInteger: PROC [in: RatNum] RETURNS [BOOLEAN]; <> <<***** Miscellaneous BigCardinal routines *****>> <<>> BigPowerOfTen: PROC [exponent: CARDINAL] RETURNS [power: BC.BigCARD]; BigToREAL: PROC [in: BC.BigCARD, reuse: BOOLEAN _ FALSE] RETURNS [out: REAL]; BigOne: PROC [in: BC.BigCARD] RETURNS [BOOLEAN]; <> END.