pub fn bisection<F: Fn(AD) -> AD>(
    f: F,
    interval: (f64, f64),
    times: usize,
    tol: f64,
) -> Result<f64, RootError> {
    let (a, b) = interval;
    let mut root_finder = RootFinder::new(I(a, b), RootFind::Bisection, f)?;
    root_finder.set_tol(tol);
    root_finder.set_times(times);
    root_finder.find_root()
}
Bisection method to find root

# Usage
```
extern crate peroxide;
use peroxide::fuga::*;

fn main() -> Result<(), RootError> {
let x = bisection(f, (0f64, 4f64), 100, 1e-15)?;
assert!((x - 3f64).abs() < 1e-15);
Ok(())
}

fn f(x: AD) -> AD {
x.powi(2) - x * 2f64 - 3f64
}
```
src/grave/root.rs