binaryRoot function

double binaryRoot(
  1. double f(
    1. double
    ),
  2. double lower,
  3. double upper
)

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;
}