in commons-statistics-descriptive/src/main/java/org/apache/commons/statistics/descriptive/Skewness.java [251:282]
public double getAsDouble() {
// This method checks the sum of squared or cubed deviations is finite
// and the value of the biased variance
// to provide a consistent result when the computation is not possible.
if (sc.n < (biased ? LENGTH_TWO : LENGTH_THREE)) {
return Double.NaN;
}
final double x2 = sc.getSumOfSquaredDeviations();
if (!Double.isFinite(x2)) {
return Double.NaN;
}
final double x3 = sc.getSumOfCubedDeviations();
if (!Double.isFinite(x3)) {
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 / sc.n;
if (Statistics.zeroVariance(sc.getFirstMoment(), m2)) {
return Double.NaN;
}
// denom = pow(m2, 1.5)
final double denom = Math.sqrt(m2) * m2;
final double m3 = x3 / sc.n;
double g1 = m3 / denom;
if (!biased) {
final double n = sc.n;
g1 *= Math.sqrt(n * (n - 1)) / (n - 2);
}
return g1;
}