double findRootBF(MathFunction g, Interval i)

Source

double findRootBF(MathFunction g, Interval i) {
  //print('Analyze $i');
  if (i.length() < 0.001) {
    return i.min;
  }

  Expression tExpr = new IntervalLiteral(new Number(i.min), new Number(i.max));
  Variable t = new Variable('t');
  cm.bindVariable(t, tExpr);

  Interval gEval = g.evaluate(EvaluationType.INTERVAL, cm);

  if (gEval.containsZero()) {
    num r1 = findRootBF(g, new Interval(i.min, (i.min + i.max) / 2.0));
    num r2 = findRootBF(g, new Interval((i.min + i.max) / 2.0, i.max));
    return Math.min(r1, r2); // Return root ar minimal distance.
  } else {
    return MAX_DIST;
  }
}