← DL-Pascal collectionMATHTOOL.pas
DOWNLOAD ORIGINAL FILE
{ DL-Pascal Unit Implementation: MathTools }
{ Requires MATHTOOL.UNI (compiled interface) }
{ Compile this -> produces MATHTOOL.OLE }
UNIT MathTool;
{ Private helper â not visible outside unit }
FUNCTION IsOdd(n : Integer) : Boolean;
BEGIN
IsOdd := (n MOD 2) <> 0;
END;
PROCEDURE UTReset;
BEGIN
CallCount := 0;
END;
FUNCTION UTAdd(a, b : Integer) : Integer;
BEGIN
Inc(CallCount);
UTAdd := a + b;
END;
FUNCTION UTMul(a, b : Integer) : LongInt;
BEGIN
Inc(CallCount);
UTMul := LongInt(a) * b;
END;
FUNCTION UTMax(a, b : Integer) : Integer;
BEGIN
Inc(CallCount);
IF a > b THEN UTMax := a ELSE UTMax := b;
END;
FUNCTION UTMin(a, b : Integer) : Integer;
BEGIN
Inc(CallCount);
IF a < b THEN UTMin := a ELSE UTMin := b;
END;
FUNCTION UTAbs(n : Integer) : Integer;
BEGIN
Inc(CallCount);
IF n < 0 THEN UTAbs := -n ELSE UTAbs := n;
END;
FUNCTION UTIsPrime(n : Integer) : Boolean;
VAR d : Integer;
BEGIN
Inc(CallCount);
IF n < 2 THEN BEGIN UTIsPrime := False; Exit; END;
IF n = 2 THEN BEGIN UTIsPrime := True; Exit; END;
IF NOT IsOdd(n) THEN BEGIN UTIsPrime := False; Exit; END;
d := 3;
WHILE d * d <= n DO BEGIN
IF (n MOD d) = 0 THEN BEGIN UTIsPrime := False; Exit; END;
Inc(d, 2);
END;
UTIsPrime := True;
END;
FUNCTION UTFactorial(n : Integer) : LongInt;
BEGIN
Inc(CallCount);
IF n <= 1 THEN UTFactorial := 1
ELSE UTFactorial := n * UTFactorial(n - 1);
END;
FUNCTION UTGcd(a, b : Integer) : Integer;
BEGIN
Inc(CallCount);
IF b = 0 THEN UTGcd := a
ELSE UTGcd := UTGcd(b, a MOD b);
END;
PROCEDURE UTInitStats(VAR st : TStats);
BEGIN
Inc(CallCount);
st.count := 0;
st.sum := 0;
st.min := 32767;
st.max := -32768;
END;
PROCEDURE UTAddStat(VAR st : TStats; val : Integer);
BEGIN
Inc(CallCount);
Inc(st.count);
Inc(st.sum, val);
IF val < st.min THEN st.min := val;
IF val > st.max THEN st.max := val;
END;
FUNCTION UTMean(VAR st : TStats) : Real;
BEGIN
Inc(CallCount);
IF st.count = 0 THEN UTMean := 0.0
ELSE UTMean := st.sum / st.count;
END;
BEGIN
{ Unit initialization }
CallCount := 0;
END.