(* ----------------------------------------------------------------------------
 * $Id: SACD.md,v 1.2 1992/02/12 13:19:10 pesch Exp $
 * ----------------------------------------------------------------------------
 * This file is part of MAS.
 * ----------------------------------------------------------------------------
 * Copyright (c) 1989 - 1992 Universitaet Passau
 * ----------------------------------------------------------------------------
 * $Log: SACD.md,v $
 * Revision 1.2  1992/02/12  13:19:10  pesch
 * Moved CONST Definition to the right place.
 *
 * Revision 1.1  1992/01/22  15:08:12  kredel
 * Initial revision
 *
 * ----------------------------------------------------------------------------
 *)

DEFINITION MODULE SACD;

(* SAC Digit Definition Module. *)



(* Import lists and Definitions *) 

FROM MASSTOR IMPORT LIST;


VAR THETA, ZETA, DELTA, ETA, EPSIL: LIST;

    
    TABP2: ARRAY[1..64] OF LIST;

CONST rcsid = "$Id: SACD.md,v 1.2 1992/02/12 13:19:10 pesch Exp $";
CONST copyright = "Copyright (c) 1989 - 1992 Universitaet Passau";


    
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.


(* -EOF- *)