<> <> 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 = REF BigRatRep; BigRatRep: TYPE = RECORD [ sign: Basics.Comparison _ equal, num: BigCard _ BigCardinals.Zero, den: BigCard _ BigCardinals.Zero ]; RatPoint: TYPE = PTS.Point; 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: PROC [in: IO.STREAM] RETURNS [out: BigRat]; FromRope: PROC [rope: ROPE] RETURNS [out: BigRat]; <> <> <> <> ToRope: PROC [rat: BigRat] RETURNS [out: ROPE]; <> ToRopeApprox: PROC [rat: BigRat, places: NAT _ 3] RETURNS [ROPE]; <> Write: PROC [stream: IO.STREAM, in: BigRat]; 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: PROC [firstArg, secondArg: BigRat] RETURNS [result: BigRat]; Negate: PROC [arg: BigRat] RETURNS [result: BigRat]; Subtract: PROC [firstArg, secondArg: BigRat] RETURNS [result: BigRat]; Multiply: PROC [firstArg, secondArg: BigRat, simplify: BOOL _ TRUE] RETURNS [result: BigRat]; Invert: PROC [arg: BigRat] RETURNS [result: BigRat]; Divide: PROC [firstArg, secondArg: BigRat, simplify: BOOL _ TRUE] RETURNS [result: BigRat]; <> Sign: PROC [arg: BigRat] RETURNS [Basics.Comparison]; <<>> Abs: PROC [arg: BigRat] RETURNS [result: BigRat]; Compare: PROC [firstArg, secondArg: BigRat] RETURNS [Basics.Comparison]; Equal: PROC [x, y: BigRat, simplify: BOOL _ TRUE] RETURNS [BOOL]; <> 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.