<<>> <> <> <> <> <> <> DIRECTORY Basics USING [Comparison], Rope USING [ROPE]; BigCardinals: CEDAR DEFINITIONS = BEGIN <> <> BigCARD: TYPE = RECORD [size: NAT ¬ 0, contents: REF BigCARDRec ¬ NIL]; BigCARDRec: TYPE = RECORD [PACKED SEQUENCE max: NAT OF CARD16]; <> Zero: BigCARD = [0, NIL]; <> <<>> BigFail: ERROR [subclass: ATOM ¬ $Unspecified]; <> <> BigAdd: PROC [in1, in2: BigCARD] RETURNS [BigCARD]; BigSubtract: PROC [large, small: BigCARD, reuse: BOOL ¬ FALSE] RETURNS [BigCARD]; <> <> BigMultiply: PROC [in1, in2: BigCARD] RETURNS [BigCARD]; BigDivMod: PROC [num, den: BigCARD, reuse: BOOL ¬ FALSE] RETURNS [quo, rem: BigCARD]; <> <> <> <> BigFromDecimalRope: PROC [in: Rope.ROPE] RETURNS [BigCARD]; BigToDecimalRope: PROC [in: BigCARD, reuse: BOOL ¬ FALSE] RETURNS [Rope.ROPE]; <> BigFromBinaryRope: PROC [in: Rope.ROPE] RETURNS [BigCARD]; BigToBinaryRope: PROC [in: BigCARD] RETURNS [Rope.ROPE]; <> BigFromRope: PROC[in: Rope.ROPE] RETURNS [out: BigCARD]; BigToRope: PROC [in: BigCARD] RETURNS [out: Rope.ROPE]; <> BigFromSmall: PROC [in: CARD16] RETURNS [BigCARD]; BigToSmall: PROC [in: BigCARD] RETURNS [CARD16]; <> <<>> BigFromCard: PROC [in: CARD] RETURNS [BigCARD]; BigToCard: PROC [in: BigCARD] RETURNS [CARD]; <> <> BigCopy: PROC [in: BigCARD] RETURNS [BigCARD]; <> <> BigCompare: PROC [in1, in2: BigCARD] RETURNS [Basics.Comparison]; <> BigZero: PROC [in: BigCARD] RETURNS [BOOL]; BigOne: PROC [in: BigCARD] RETURNS [BOOL]; <> BigOdd: PROC [in: BigCARD] RETURNS [BOOL]; <> MultiplyByDigit: PROC [big: BigCARD, small: CARD16, reuse: BOOL ¬ FALSE] RETURNS [BigCARD]; <> TwoToTheNth: PROC [n: NAT] RETURNS [BigCARD]; <> TimesTwoToTheNth: PROC [in: BigCARD, n: NAT] RETURNS [BigCARD]; <> FirstOneBit: PROC [bc: BigCARD] RETURNS [INT]; <> <<>> LowOrderZeros: PROC [bc: BigCARD] RETURNS [INT]; <> <<>> BigPowerOfTen: PROC [exponent: NAT] RETURNS [BigCARD]; BigPowerOfBase: PROC [base: BigCARD, exponent: NAT] RETURNS [BigCARD]; Shift: PROC [bc: BigCARD, bits: INT] RETURNS [BigCARD]; <> BigToREAL: PROC [in: BigCARD] RETURNS [REAL]; BigFactorial: PROC [x: NAT] RETURNS [BigCARD]; <> BigRandom: PROC [length: NAT ¬ 0, max, min: BigCARD ¬ Zero] RETURNS [BigCARD]; <> <<1) If `length' is nonzero than the result has `length' digits of radix 2^16>> <<2) If `length' is zero than the result is in the range [min, max]>> BigExponentiate: PROC [base, exponent, modulus: BigCARD, reuse: BOOL ¬ FALSE] RETURNS [BigCARD]; <> <> <<>> BigGCD: PROC [in1, in2: BigCARD] RETURNS [out: BigCARD]; BigInverse: PROC [in, modulus: BigCARD] RETURNS [out: BigCARD]; <> <> BigPrimeTest: PROC [prime: BigCARD, accuracy: NAT ¬ 20] RETURNS [BOOL]; <> END.