<> <> DIRECTORY Rope, Basics, IO, BigCardinals, AlgebraClasses; BigRats: CEDAR DEFINITIONS = BEGIN OPEN BC: BigCardinals, AC: AlgebraClasses; <> CARD: TYPE = LONG CARDINAL; ROPE: TYPE = Rope.ROPE; BigCard: TYPE = BC.BigCARD; BigRat: TYPE = AC.Object; BigRatData: TYPE = REF BigRatDataRec; BigRatDataRec: TYPE = RECORD [ sign: Basics.Comparison _ equal, num: BigCard _ BigCardinals.Zero, den: BigCard _ BigCardinals.Zero ]; BigRats: AC.Object; -- public structure <> FromPairBC: PROC [num, den: BigCard, less: BOOL _ FALSE] RETURNS [BigRat]; < -num/den). Raises RuntimeError.ZeroDivisor when den = 0.>> FromPairLC: PROC [num, den: CARD, less: BOOL _ FALSE] RETURNS [BigRat]; < -num/den). Raises RuntimeError.ZeroDivisor when den = 0.>> FromBC: PROC [bc: BigCard, less: BOOL _ FALSE] RETURNS [BigRat]; < -bc).>> FromLC: PROC [lc: CARD, less: BOOL _ FALSE] RETURNS [BigRat]; < -lc).>> <> Recast: AC.BinaryOp; CanRecast: AC.BinaryPredicate; LegalFirstChar: AC.LegalFirstCharOp; Read: AC.ReadOp; FromRope: AC.FromRopeOp; <> <> <> <> ToRope: AC.ToRopeOp; <> ToRopeApprox: PROC [rat: BigRat, places: NAT _ 3] RETURNS [ROPE]; <> Write: AC.WriteOp; WriteApprox: PROC [stream: IO.STREAM, in: BigRat]; ToExpr: AC.ToExprOp; FromReal: PROC [real: REAL] RETURNS [BigRat]; <> <<(will raise Real.RealException if real is not a number)>> ToReal: PROC [rat: BigRat] RETURNS [REAL]; <> <<(will raise Real.RealException if rat is outside the range covered by REAL)>> <<>> Truncate: PROC [rat: BigRat] RETURNS [fix: BigCard, rem: BigRat]; <> < rat.den => fix = rat.num / rat.den, rem = FromPair[rat.num MOD rat.den, rat.den]>> < fix = 1, rem = 0>> < fix = 1, rem = 0>> <> Zero: AC.NullaryOp; One: AC.NullaryOp; Add: AC.BinaryOp; Negate: AC.UnaryOp; Subtract: AC.BinaryOp; Multiply: AC.BinaryOp; Power: AC.BinaryOp; Invert: AC.UnaryOp; Divide: AC.BinaryOp; <> Equal: AC.BinaryPredicate; <> Sign: AC.CompareToZeroOp; <<>> Abs: AC.UnaryOp; Compare: AC.BinaryCompareOp; Integer: PROC [in: BigRat] RETURNS [BOOLEAN]; <> <> ToTheX: PROC [rat: BigRat, x: INT] RETURNS [BigRat]; <> TwoToTheX: PROC [x: INT, less: BOOL _ FALSE] RETURNS [BigRat]; <> BCToTheX: PROC [bc: BigCard, x: INT, less: BOOL _ FALSE] RETURNS [BigRat]; < - bc**x). Note that BCToTheX[0, 0] = 1.>> END.