function varianceBinarySearch(points, i, entropy, error=1e-6, steps=40) {
function recursiveBinarySearch(variance, lowerBound, upperBound) {
const probabilities = computeP_i(points, i, variance),
currentEntropy = computeEntropy(probabilities);
if (steps-- <= 1 || Math.abs(currentEntropy - entropy) <= error)
return probabilities;
if (currentEntropy > entropy)
return recursiveBinarySearch((lowerBound+variance)/2, lowerBound, variance);
else
return recursiveBinarySearch((variance+upperBound)/2, variance, upperBound);
}
const MINVAR = 0.01,
MAXVAR = 50;
return recursiveBinarySearch((MINVAR+MAXVAR)/2, MINVAR, MAXVAR);
}