in commons-statistics-inference/src/main/java/org/apache/commons/statistics/inference/KolmogorovSmirnovDistribution.java [765:791]
private static double sfExact(double x, int n) {
if (n * x * x >= 372.5 || x >= 1) {
// p would underflow, or x is out of the domain
return 0;
}
if (x <= 0) {
// edge-of, or out-of, the domain
return 1;
}
if (n == 1) {
return x;
}
// x <= 1/n
// [1] Equation (33)
final double nx = n * x;
if (nx <= 1) {
// 1 - x (1+x)^(n-1): here x may be small so use log1p
return 1 - x * Math.exp((n - 1) * Math.log1p(x));
}
// 1 - 1/n <= x < 1
// [1] Equation (16)
if (n - 1 <= nx) {
// (1-x)^n: here x > 0.5 and 1-x is exact
return Math.pow(1 - x, n);
}
return -1;
}