in commons-statistics-descriptive/src/main/java/org/apache/commons/statistics/descriptive/Kurtosis.java [249:276]
public double getAsDouble() {
// This method checks the sum of squared or fourth deviations is finite
// to provide a consistent NaN when the computation is not possible.
if (sq.n < (biased ? LENGTH_TWO : LENGTH_FOUR)) {
return Double.NaN;
}
final double x2 = sq.getSumOfSquaredDeviations();
if (!Double.isFinite(x2)) {
return Double.NaN;
}
final double x4 = sq.getSumOfFourthDeviations();
if (!Double.isFinite(x4)) {
return Double.NaN;
}
// Avoid a divide by zero; for a negligible variance return NaN.
// Note: Commons Math returns zero if variance is < 1e-19.
final double m2 = x2 / sq.n;
if (Statistics.zeroVariance(sq.getFirstMoment(), m2)) {
return Double.NaN;
}
final double m4 = x4 / sq.n;
if (biased) {
return m4 / (m2 * m2) - 3;
}
final double n = sq.n;
return ((n * n - 1) * m4 / (m2 * m2) - 3 * (n - 1) * (n - 1)) / ((n - 2) * (n - 3));
}