#include <iostream>
#include <iomanip>
using namespace std;
double chord(double a, double b, double e, double (*f)(double))
{ // метод хорд
double fa = f(a), fb = f(b);
if (fa*fb > 0) throw runtime_error("Wrong data");
for(;abs(b-a) > e;)
{
double x = a - (b-a)*fa/(fb-fa);
b = a;
fb = fa;
a = x;
fa = f(x);
}
return a;
}
double dichotomy(double a, double b, double e, double (*f)(double))
{ //метод дихотомии
double fa = f(a), fb = f(b);
if (fa*fb > 0) throw runtime_error("Wrong data");
for(;abs(b - a) > e;)
{
double x = (a + b)/2;
if (f(x)*fa > 0) a = x;
else b = x;
}
return (a+b)/2;
}
double g(double x)
{
return x * x * x - 18 * x - 83;
}
double f(double x)
{
return x * x * x + 4 * x - 3;
}
int main()
{
try {
cout << chord(0,1,0.0001,f) << " vs " << dichotomy(0,1,0.0001,f) << "\n";
cout << chord(2,10,0.0001,g) << " vs " << dichotomy(2,10,0.0001,g) << "\n";
} catch(exception&e)
{
cerr << e.what() << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCmRvdWJsZSBjaG9yZChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBlLCBkb3VibGUgKCpmKShkb3VibGUpKQp7ICAvLyDQvNC10YLQvtC0INGF0L7RgNC0CgogICAgZG91YmxlIGZhID0gZihhKSwgZmIgPSBmKGIpOwogICAgaWYgKGZhKmZiID4gMCkgdGhyb3cgcnVudGltZV9lcnJvcigiV3JvbmcgZGF0YSIpOwoKICAgIGZvcig7YWJzKGItYSkgPiBlOykKICAgIHsKICAgICAgICBkb3VibGUgeCA9IGEgLSAoYi1hKSpmYS8oZmItZmEpOwogICAgICAgIGIgPSBhOwogICAgICAgIGZiID0gZmE7CiAgICAgICAgYSA9IHg7CiAgICAgICAgZmEgPSBmKHgpOwogICAgfQogICAgcmV0dXJuIGE7Cn0KCmRvdWJsZSBkaWNob3RvbXkoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgZSwgZG91YmxlICgqZikoZG91YmxlKSkKeyAvL9C80LXRgtC+0LQg0LTQuNGF0L7RgtC+0LzQuNC4CiAgICBkb3VibGUgZmEgPSBmKGEpLCBmYiA9IGYoYik7CiAgICBpZiAoZmEqZmIgPiAwKSB0aHJvdyBydW50aW1lX2Vycm9yKCJXcm9uZyBkYXRhIik7CgogICAgZm9yKDthYnMoYiAtIGEpID4gZTspCiAgICB7CiAgICAgICAgZG91YmxlIHggPSAoYSArIGIpLzI7CiAgICAgICAgaWYgKGYoeCkqZmEgPiAwKSAgYSA9IHg7CiAgICAgICAgZWxzZSAgICAgICAgICAgICAgYiA9IHg7CiAgICB9CiAgICByZXR1cm4gKGErYikvMjsKfQoKZG91YmxlIGcoZG91YmxlIHgpCnsKICAgIHJldHVybiB4ICogeCAqIHggLSAxOCAqIHggLSA4MzsKfQoKZG91YmxlIGYoZG91YmxlIHgpCnsKICAgIHJldHVybiB4ICogeCAqIHggKyA0ICogeCAtIDM7Cn0KCmludCBtYWluKCkKewogICAgdHJ5IHsKICAgICAgICBjb3V0IDw8IGNob3JkKDAsMSwwLjAwMDEsZikgIDw8ICIgIHZzICAiIDw8IGRpY2hvdG9teSgwLDEsMC4wMDAxLGYpICA8PCAiXG4iOwogICAgICAgIGNvdXQgPDwgY2hvcmQoMiwxMCwwLjAwMDEsZykgPDwgIiAgdnMgICIgPDwgZGljaG90b215KDIsMTAsMC4wMDAxLGcpIDw8ICJcbiI7CiAgICB9IGNhdGNoKGV4Y2VwdGlvbiZlKQogICAgewogICAgICAgIGNlcnIgPDwgZS53aGF0KCkgPDwgZW5kbDsKICAgIH0KfQo=