enum Condition
{
close_enough
, positive
, negative
};
Condition CloseEnough (double test_number
, function<double(const double&)> f)
{
auto result = f (test_number);
if (result < 0) {
return negative;
}
else if (result < 0.0001) {
return close_enough;
}
else {
return positive;
}
}
double SearchAnswer ( double neg_point
, double pos_point
, function<double(const double&)> f)
{
auto mid_point = (neg_point + pos_point) / 2;
auto condition = CloseEnough (mid_point, f);
if (condition == close_enough) {
return mid_point;
}
else if (condition == positive) {
return SearchAnswer (neg_point, mid_point, f);
}
else {
return SearchAnswer (mid_point, pos_point, f);
}
}
int main ()
{
cout << SearchAnswer (-8.2, 2.3
, [] (const double &x){return (4 * x * x - 1);});
cout << endl;
return 0;
}
{
close_enough
, positive
, negative
};
Condition CloseEnough (double test_number
, function<double(const double&)> f)
{
auto result = f (test_number);
if (result < 0) {
return negative;
}
else if (result < 0.0001) {
return close_enough;
}
else {
return positive;
}
}
double SearchAnswer ( double neg_point
, double pos_point
, function<double(const double&)> f)
{
auto mid_point = (neg_point + pos_point) / 2;
auto condition = CloseEnough (mid_point, f);
if (condition == close_enough) {
return mid_point;
}
else if (condition == positive) {
return SearchAnswer (neg_point, mid_point, f);
}
else {
return SearchAnswer (mid_point, pos_point, f);
}
}
int main ()
{
cout << SearchAnswer (-8.2, 2.3
, [] (const double &x){return (4 * x * x - 1);});
cout << endl;
return 0;
}