home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / TPL60N19 / TESTPRGS / POWER.PAS < prev    next >
Pascal/Delphi Source File  |  1993-02-14  |  959b  |  46 lines

  1. {$A+,B-,D-,E+,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  2.  
  3. UNIT Power;   { code adapted from Kahan's PARANOIA program 05-01-92 N. Juffa }
  4.  
  5.  
  6. INTERFACE
  7.  
  8. FUNCTION Pow (X, Y: REAL): REAL;
  9.  
  10.  
  11. IMPLEMENTATION
  12.  
  13. { Crude power function:  see Cody & Waite for a better one. }
  14.  
  15. FUNCTION Pow (X, Y: REAL): REAL;
  16.  
  17. VAR Z:        REAL;
  18.     IY:       LONGINT;
  19.     Reciproc: BOOLEAN;
  20.  
  21. BEGIN { Pow }
  22.    IF Y = 0.0 THEN
  23.       Pow := 1.0
  24.    ELSE IF (X = 0.0) AND (Y > 0.0) THEN
  25.       Pow := 0.0
  26.    ELSE IF (Y = Int (Y)) AND (Abs(Y) <= MAXLONGINT) THEN BEGIN
  27.       IY := TRUNC (Y);
  28.       IF IY < 0 THEN
  29.          X := 1/X;
  30.       IY := Abs (IY);
  31.       Z := 1.0;
  32.       WHILE IY > 0 DO BEGIN
  33.          IF Odd (IY) THEN
  34.             Z := Z * X;
  35.          IY := IY DIV 2;
  36.          IF IY > 0 THEN
  37.             X := Sqr (X);
  38.       END; {endwhile}
  39.       Pow := Z;
  40.       END { if Y = Int (....}
  41.    ELSE
  42.       Pow := Exp (Y * Ln (X));
  43. END; { Pow }
  44.  
  45. END. { Power }
  46.