(* ---------------------------------------------------------------------------- * $Id: SACRN.md,v 1.2 1992/02/12 13:19:18 pesch Exp $ * ---------------------------------------------------------------------------- * This file is part of MAS. * ---------------------------------------------------------------------------- * Copyright (c) 1989 - 1992 Universitaet Passau * ---------------------------------------------------------------------------- * $Log: SACRN.md,v $ * Revision 1.2 1992/02/12 13:19:18 pesch * Moved CONST Definition to the right place. * * Revision 1.1 1992/01/22 15:08:20 kredel * Initial revision * * ---------------------------------------------------------------------------- *) DEFINITION MODULE SACRN; (* SAC Rational Number Definition Module. *) FROM MASSTOR IMPORT LIST;CONSTrcsid = "$Id: SACRN.md,v 1.2 1992/02/12 13:19:18 pesch Exp $";CONSTcopyright = "Copyright (c) 1989 - 1992 Universitaet Passau";PROCEDURE RIRNP(I,CL: LIST): LIST; (*Rational interval rational number product. I is an interval with rational endpoints. c is a rational number. J is the interval I*c.*)PROCEDURE RNABS(R: LIST): LIST; (*Rational number absolute value. R is a rational number. S is the absolute value of R.*)PROCEDURE RNCEIL(RL: LIST): LIST; (*Rational number, ceiling of. r is a rational number. a=CEILING(r), an integer.*)PROCEDURE RNCOMP(R,S: LIST): LIST; (*Rational number comparison. R and S are rational numbers. t=SIGN(R-S).*)PROCEDURE RNDEN(R: LIST): LIST; (*Rational number denominator. R is a rational number. b is the denominator of R, a positive integer.*)PROCEDURE RNDIF(R,S: LIST): LIST; (*Rational number difference. R and S are rational numbers. T=R-S.*)PROCEDURE RNDWR(R,NL: LIST); (*Rational number decimal write. R is a rational number. n is a non-negative integer. R is approximated by a decimal fraction D with n decimal digits following the decimal point and D is written in the output stream. The inaccuracy of the approximation is at most (1/2)*10**-n. If ABS(D) is greater than ABS(R) then the last digit is followed by a minus sign, if ABS(D) is less than ABS(R) then by a plus sign.*)PROCEDURE RNFCL2(AL: LIST;VARML,NL: LIST); (*Rational number floor and ceiling of logarithm, base 2. a is a non- zero rational number. m=FLOOR(LOG2(ABS(a))) and n=CEILING(LOG2(ABS(a))) are gamma-integers.*)PROCEDURE RNFLOR(RL: LIST): LIST; (*Rational number, floor of. r is a rational number. a=FLOOR(r), an integer.*)PROCEDURE RNINT(A: LIST): LIST; (*Rational number from integer. A is an integer. R is the rational number A/1.*)PROCEDURE RNINV(R: LIST): LIST; (*Rational number inverse. R is a non-zero rational number. S=1/R.*)PROCEDURE RNNEG(R: LIST): LIST; (*Rational number negative. R is a rational number. S=-R.*)PROCEDURE RNNUM(R: LIST): LIST; (*Rational number numerator. R is a rational number. a is the numerator of R, an integer.*)PROCEDURE RNPROD(R,S: LIST): LIST; (*Rational number product. R and S are rational numbers. T=R*S.*)PROCEDURE RNP2(KL: LIST): LIST; (*Rational number power of 2. k is a gamma-integer. r=2**k, a rational number.*)PROCEDURE RNQ(R,S: LIST): LIST; (*Rational number quotient. R and S are rational numbers, S non-zero. T=R/S.*)PROCEDURE RNRAND(NL: LIST): LIST; (*Rational number, random. n is a positive beta-integer. Random integers A and B are generated using IRAND(n). Then R=A/(ABS(B)+1), reduced to lowest terms.*)PROCEDURE RNREAD(): LIST; (*Rational number read. The rational number R is read from the input stream. Any preceding blanks are skipped.*)PROCEDURE RNRED(A,B: LIST): LIST; (*Rational number reduction to lowest terms. A and B are integers, B non-zero. R is the rational number A/B in canonical form.*)PROCEDURE RNSIGN(R: LIST): LIST; (*Rational number sign. R is a rational number. s=SIGN(R).*)PROCEDURE RNSUM(R,S: LIST): LIST; (*Rational number sum. R and S are rational numbers. T=R+S.*)PROCEDURE RNWRIT(R: LIST); (*Rational number write. R is a rational number. R is converted to decimal and written in the output stream.*)ENDSACRN. (* -EOF- *)