The method for bidirectional bracketing. That is, given a starting point, it finds an interval containing
an extermum which must be a minimum, but can be greater or less than x.
*
The method for unidirectional bracketing. That is, given a starting point, it finds an interval containing
an extermum which may be of any kind (minimum or maximum), but must be greater than x.
Expands the bracketing interval until it surely contains at least one extremum of the given type.
Obs.: the extreme type must be consistent with the bracket supplied i.e. if extreme_type is 1,
so we search for a minimum, b must be less than a (unlike in AccelDerivBracketing
equality is not permitted). If extreme_type is -1, a must be less than b. This is guaranteed if the bracket
is set by the corresponding find_initial method.
*
Finds an initial, reasonable large interval, which can be subsequently enlarged by extend.
The algorithm initially sets the b point of the bracket to x + mindist. If f(x + mindist) == f(x)
the interval is increased until f(x + interval_width) != f(x).
*