{POWER Function library for Pascal; (c) 1981 by Ficomp, Inc. Fairfax, Va.} MODULE POWRLIB; {$M LOG10} {$M ALOG10} {$M POWER} {$M ROOT} {$M RPOWER} {$M *} CONST LOGCON = 2.302585093; EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN; ERRNUM:INTEGER); {COMMON LOG FUNCTIONS} FUNCTION LOG10(X:REAL): REAL; {LOG (BASE 10) FUNCTION} BEGIN IF X<=0.0 THEN BEGIN @ERR(TRUE,4); WRITELN('LOG10(',X,') '); LOG10 := 0.0 END ELSE LOG10 := LN(X)/LOGCON END; FUNCTION ALOG10(X:REAL): REAL; {ANTILOG (BASE 10) FUNCTION} BEGIN ALOG10 := EXP(X*LOGCON); END; {POWER FUNCTIONS} FUNCTION POWER(X:REAL;N:INTEGER): REAL; {COMPUTES REAL X RAISED TO INTEGER POWER N RECURSIVELY} BEGIN IF X=0.0 THEN POWER := 0.0 ELSE IF N=0 THEN POWER := 1.0 ELSE IF N<0 THEN POWER := POWER(X,N+1)/X ELSE POWER := POWER(X,N-1)*X END; FUNCTION ROOT(X:REAL;N:INTEGER): REAL; {COMPUTES INTEGER ROOT N OF REAL X} BEGIN IF (X=0.0) OR (N=0) THEN ROOT := 0.0 ELSE IF (NOT ODD(N)) AND (X<0) THEN BEGIN @ERR(TRUE,4); WRITELN(N,' ROOT OF ',X); ROOT := 0.0 END ELSE IF N=1 THEN ROOT := X ELSE IF X>0 THEN ROOT := EXP(LN(X)/N) ELSE ROOT := -EXP(LN(ABS(X))/N) END; FUNCTION RPOWER(X,N:REAL): REAL; {COMPUTES REAL X RAISED TO REAL POWER N} BEGIN IF X<0.0 THEN BEGIN @ERR(TRUE,4); WRITELN('RPOWER(',X,') '); RPOWER :=0.0 END ELSE IF X=0.0 THEN RPOWER := 0.0 ELSE IF N=0.0 THEN RPOWER :=1.0 ELSE RPOWER :=EXP(LN(X)*N) END; MODEND.