home *** CD-ROM | disk | FTP | other *** search
- MODULE Mathe; (* $StackChk- *)
-
-
- PROCEDURE GGT*(x{2},y{3}: LONGINT): LONGINT; (* $SaveRegs+ *)
- BEGIN
- REPEAT
- IF x>y THEN x := x+y; y := x-y; x := x-y; END;
- y := y MOD x
- UNTIL y=0;
- RETURN x;
- END GGT;
-
-
- PROCEDURE KGV*(x{2},y{3}: LONGINT): LONGINT; (* $SaveRegs+ *)
-
- BEGIN
- RETURN x * y DIV GGT(x,y);
- END KGV;
-
-
- PROCEDURE Sqrt*(x{2}: LONGINT): LONGINT; (* $SaveRegs+ *)
-
- VAR
- b: LONGINT;
-
- BEGIN
- IF x<8H THEN b := x DIV 4H + 1H;
- ELSIF x<20H THEN b := x DIV 8H + 2H;
- ELSIF x<80H THEN b := x DIV 10H + 4H;
- ELSIF x<200H THEN b := x DIV 20H + 8H;
- ELSIF x<800H THEN b := x DIV 40H + 10H;
- ELSIF x<2000H THEN b := x DIV 80H + 20H;
- ELSIF x<8000H THEN b := x DIV 100H + 40H;
- ELSIF x<20000H THEN b := x DIV 200H + 80H;
- ELSIF x<80000H THEN b := x DIV 400H + 100H;
- ELSIF x<200000H THEN b := x DIV 800H + 200H;
- ELSIF x<800000H THEN b := x DIV 1000H + 400H;
- ELSIF x<2000000H THEN b := x DIV 2000H + 800H;
- ELSIF x<8000000H THEN b := x DIV 4000H + 1000H;
- ELSIF x<20000000H THEN b := x DIV 8000H + 2000H;
- ELSE b := x DIV 10000H + 4000H END;
- RETURN (b + x DIV b) DIV 2;
- END Sqrt;
-
-
- PROCEDURE Fak*(x{2}: LONGINT): LONGINT; (* $SaveRegs+ *)
-
- VAR
- b: LONGINT;
-
- BEGIN
- b := 1;
- WHILE x>1 DO
- b := b * x;
- DEC(x);
- END;
- RETURN b;
- END Fak;
-
-
- PROCEDURE BinKoeff*(n{2},k{3}: LONGINT): LONGINT; (* $SaveRegs+ *)
-
- VAR
- r,s: LONGINT;
-
- BEGIN
- r := 1; s := r;
- WHILE k>0 DO
- r := r * n;
- s := s * k;
- DEC(n);
- DEC(k);
- END;
- RETURN r DIV s;
- END BinKoeff;
-
-
- PROCEDURE Pow*(n{2},k{3}: LONGINT): LONGINT; (* $SaveRegs+ *)
-
- VAR
- r: LONGINT;
-
- BEGIN
- r := 1;
- WHILE k>0 DO
- r := r * n;
- DEC(k);
- END;
- RETURN r;
- END Pow;
-
-
- END Mathe.
-