#include
#include
#include
// Функция, определяющая f(x)
double f(double x) {
return pow(x, 5) - 0.3 * fabs(x - 1);
}
// Функция, реализующая метод деления отрезка пополам
double bisection(double a, double b, double epsilon) {
if (f(a) * f(b) >= 0) {
std::cerr << "Ошибка: f(a) и f(b) должны иметь разные знаки" << std::endl;
std::exit(EXIT_FAILURE);
}
double c = a;
while ((b - a) >= epsilon) {
c = (a + b) / 2;
if (f(c) == 0.0)
break;
if (f(c) * f(a) < 0)
b = c;
else
a = c;
}
return c;
}
int main() {
double a, b;
double epsilon = 1e-5;
std::cout << "Введите начальный интервал [a, b]:" << std::endl;
std::cout << "a = ";
std::cin >> a;
std::cout << "b = ";
std::cin >> b;
double root = bisection(a, b, epsilon);
std::cout << "Корень уравнения f(x) = 0 на интервале [" << a << ", " << b << "] с точностью " << epsilon << " равен " << root << std::endl;
return 0;
}
Результат
a=0,b=1