<> <> DIRECTORY Rope, Basics, IO, BigCardinals, AlgebraClasses, Points; BigRats: CEDAR DEFINITIONS = BEGIN OPEN BC: BigCardinals, AC: AlgebraClasses, PTS: Points; <> 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.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).>> <> 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]; 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>> <<>> <> Add: AC.BinaryOp; Negate: AC.UnaryOp; Subtract: AC.BinaryOp; Multiply: AC.BinaryOp; Invert: AC.UnaryOp; Divide: AC.BinaryOp; <> Sign: AC.CompareToZeroOp; <<>> Abs: AC.UnaryOp; Compare: AC.BinaryCompareOp; Equal: AC.EqualityOp; <> 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.