Question

For a project I have a specification with formulas, I have to implement. In these formulas a cumulative standard normal distribution function exists, that takes a float and outputs a probability. The function is symbolized by a Φ. Exists a Java-library, that computes this function?

Was it helpful?

Solution 3

A co-worker suggested colt, as he used it before. This function has exactly the result as the example in the reference document.

OTHER TIPS

Apache Commons - Math has what you are looking for.

More specifically, check out the NormalDistribution class.

If you want the exact code, this one seems to be the same function used in OpenOffice Calc (I've made some changes for it to work in java):

// returns the cumulative normal distribution function (CNDF)
// for a standard normal: N(0,1)
double CNDF(double x)
{
    int neg = (x < 0d) ? 1 : 0;
    if ( neg == 1) 
        x *= -1d;

    double k = (1d / ( 1d + 0.2316419 * x));
    double y = (((( 1.330274429 * k - 1.821255978) * k + 1.781477937) *
                   k - 0.356563782) * k + 0.319381530) * k;
    y = 1.0 - 0.398942280401 * Math.exp(-0.5 * x * x) * y;

    return (1d - neg) * y + neg * (1d - y);
}

Found it here: http://www.codeproject.com/Messages/2622967/Re-NORMSDIST-function.aspx

SuanShu, a Java numerical analysis library, computes the normal distribution and many other statistical distributions.

You could use the power series formula, which only takes up about 10 lines of code... see for example http://introcs.cs.princeton.edu/java/22library/Gaussian.java.html (the function Phi)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top