private double interpolateTail(AVLGroupTree values, double x, int node, double mean, double extremeValue) { int count = values.count(node); assert count > 1; if (count == 2) { // other sample must be on the other side of the mean return 1.0 / size(); } else { // how much weight is available for interpolation? double weight = count / 2.0 - 1; // how much is between min and here? double partialWeight = (extremeValue - x) / (extremeValue - mean) * weight; // account for sample at min along with interpolated weight return (partialWeight + 1.0) / size(); } }
return 0; } else if (x == min) { return 0.5 / size(); return 1; } else if (x == max) { long n = size(); return (n - 0.5) / n; return aWeight / 2.0 / size(); return (weightSoFar + aWeight + bWeight / 2.0) / size(); return (weightSoFar + 1.0) / size(); } else { return (weightSoFar + 1.0 + partialWeight) / size(); return (weightSoFar + aWeight / 2.0 + partialWeight) / size(); } else { return (weightSoFar + aWeight / 2.0 + partialWeight) / size();