binaryRoot function
Finds a root between lower and upper by binary search.
A root must exist between the given bounds.
Implementation
double binaryRoot(
double Function(double) f,
double lower,
double upper,
) {
var yLower = f(lower);
var mid = 0.0;
for (var j = 0; j < 52; j++) {
mid = (lower + upper) / 2;
final yMid = f(mid);
if (yMid == 0) break;
if (yLower.isNegative == yMid.isNegative) {
lower = mid;
yLower = yMid;
} else {
upper = mid;
}
}
return mid;
}