sig
  val brent : ?tol:float -> (float -> float) -> float -> float -> float
  val bisection :
    ?good_enough:(float -> float -> float -> float -> bool) ->
    (float -> float) -> float -> float -> float
  val newton :
    ?good_enough:(float -> float -> float -> bool) ->
    (float -> float * float) -> float -> float
end