(* SAC Digit definition module. *) DEFINITION MODULE SACD; (* Import lists and Definitions *) FROM MASSTOR IMPORT LIST; VAR THETA, ZETA, DELTA, ETA, EPSIL: LIST; TABP2: ARRAY[1..64] OF LIST; PROCEDURE BITRAN(): LIST; (*Bit, random. b is a random bit, 0 or 1.*) PROCEDURE DEGCD(AL,BL: LIST; VAR CL,UL,VL: LIST); (*Digit extended greatest common divisor. a and b are beta-integers, a ge b ge 0. c=GCD(a,b), a beta-integer. a*u+b*v=c, with ABS(u) le b/2c, ABS(v) le a/2c.*) PROCEDURE DGCD(AL,BL: LIST): LIST; (*Digit greatest common divisor. a and b are beta-integers, a ge b ge 0. c=GCD(a,b).*) PROCEDURE DLOG2(AL: LIST): LIST; (*Digit logarithm, base 2. a is a beta-digit. If a=0 then n=0. otherwise n=FLOOR(LOG2(ABS(a)))+1.*) PROCEDURE DPCC(AL1,AL2: LIST; VAR UL,ULP,VL,VLP: LIST); (*Digit partial cosequence calculation. a1 and a2 are beta-integers, a1 ge a2 gt 0. u, up, v and vp are the last cosequence elements of a1 and a2 which can be guaranteed to correspond to correct quotient digits.*) PROCEDURE DPR(AL,BL: LIST; VAR CL,DL: LIST); (*Digit product. a and b are beta-digits. c and d are the unique beta-digits such that a*b=c*beta+d and c*d ge 0.*) PROCEDURE DQR(AL1,AL0,BL: LIST; VAR QL,RL: LIST); (*Digit quotient and remainder. a1, a0 and b are beta-integers with a1*a0 ge 0 and ABS(b) gt ABS(a1). q is the integral part of (a1*beta+a0)/b and r is (a1*beta+a0)-b*q. q and r are beta-integers.*) PROCEDURE DRAN(): LIST; (*Digit, random. a is a random beta-digit.*) PROCEDURE DRANN(): LIST; (*Digit, random non-negative. a is a random non-negative beta-digit. Caution, the low-order bits of a are not very random.*) PROCEDURE DSQRTF(AL: LIST; VAR BL,TL: LIST); (*Digit square root function. a is a non-negative beta-integer. b is the floor function of the square root of a and t is the sign of a-b*b.*) END SACD.