Sunday, November 27, 2005

Cumulative Normal Distribution Function

The cumulative normal distribution function is actually an integral formula. There is no explicit closed form solution. A good approximation can be found at Milton Abramowiz and Irene A Stegun. Handbook of Mathematical Functions. National Bureau of Standards, 1964.

The following code is a java function for calculating the cumulative normal distribution.

public double CNDF(double z)
{
double mean = calculateMean();
double sd = calculateSD();
z = z - mean;
if (z> 6.0) return 1.0;
if (z<-6.0) return 0;
double b1 = 0.31938153;
double b2 = -0.356563782;
double b3 = 1.781477937;
double b4 = -1.821255978;
double b5 = 1.330274429;
double p = 0.2316419;
double c2 = 0.3989423;
double a = Math.abs(z);
double t = 1.0/(1.0 + a*p);
double b = c2 * Math.exp((-z)*(z/2.0));
double n = ((((b5 * t + b4)*t+b3)*t+b2)*t+b1)*t;
n = 1.0 - b*n;
if (z<0.0) n = 1.0 - n;
return n;
}

No comments: