INTERFACESpecialFunction ;

* The interface is Public Domain. The supporting implementations are copyrighted, but may be used free of charge so long as appropriate credit is given.WARNING: USE AT YOUR OWN RISK. The authors accept no responsibility for the accuracy, appropriateness or fitness for use of any of this material.

Abstract: This is a Modula-3 rendition of a collection of numerical analysis routines.

12/13/95 Harry George Initial version 1/22/96 Harry George Change to m3na project 2/17/96 Harry George Convert to separate Real* modules

FROM Arithmetic IMPORT Error; TYPE T = LONGREAL; (* IEEE 64-bit real *)---- Really special functions ----

PROCEDURE Factorial (n: CARDINAL; ): T;

n! as a real

PROCEDURE LnFactorial (n: CARDINAL; ): T;

ln(n!) as a real

PROCEDURE Gamma (x: T; ): T;

Euler's Gamma function

PROCEDURE LnGamma (x: T; ): T;

ln(Gamma(x))

PROCEDURE Binomial (n: CARDINAL; k: INTEGER; ): T;

Binomial coefficient for`n over k`

PROCEDURE GammaP (a, x: T; ): T RAISES {Error};

incomplete Gamma P(a,x)=Gamma(a,x)/Gamma(a)

PROCEDURE GammaQ (a, x: T; ): T RAISES {Error};

also, Q(a,x)=1-P(a,x)incomplete Gamma Q(a,x)=Gamma(a,x)/Gamma(a)

Notes for in-lines:

1. Cumulative Poisson Probability: Px(<k)=probability that the number of events will be between 0 and k-1 inclusive, given mean=x. Px(<k)=GammaQ(k,x) 2. Chi-Square Probability: P(X2|df)=probability that observed chi-square should be less than X2, given df degrees of freedom. P(X2|df)=GammaP(df/2.0,X2/2.0); P(0|df)=0, P(inf|df)=1 Complementary form: Q(X2|df)=GammaQ(df/2.0,X2/2.0); Q(0|df)=1, Q(inf|df)=0PROCEDURE Erf (x: T; ): T RAISES {Error};error function of xPROCEDURE ErfC (x: T; ): T RAISES {Error};1-Erf(x)PROCEDURE Beta (x, y: T; ): T;Gamma(x)*Gamma(y)/Gamma(x+y)PROCEDURE BetaI (a, b, x: T; ): T RAISES {Error};Notes for in-lines:incomplete Beta Ix(a,b)1. Student's t-test distribution for df degrees of freedom is A(t|df) = 1.0-BetaI(df/2,1/2,df/(df+t^2)) In other words, big A means t should probably be smaller 2. F-test distribution for df1 and df2 degrees of freedom is A(F|df1,df2) = BetaI(df1/2,df2/2,df2/(df2+df1*F)) 3. Cumulative binomial probability for event which has probability p of occurring in each trial, having the event occur k or moe times in n trials is P(= BetaI(k,n-k+1,p)END SpecialFunction.