Загрузка данных


public static void main(String[] args) {
    double a = 0.0;     // Левая граница
    double b = 3.0;     // Правая граница
    double eps = 0.0001; // Точность

    double root = findRoot(a, b, eps);
    System.out.printf("Найденный корень: %.4f%n", root);
}

public class BisectionMethod {

    // Математическая функция f(x), корень которой мы ищем
    public static double f(double x) {
        return x * x - 4; // Корень x = 2
    }

    // Метод половинного деления
    public static double findRoot(double a, double b, double eps) {
        // Проверяем условие существования корня на отрезке
        if (f(a) * f(b) >= 0) {
            throw new IllegalArgumentException("Функция должна иметь разные знаки на концах отрезка [a, b]");
        }

        double c = a;

        while ((b - a) / 2 > eps) {
            c = (a + b) / 2; // Находим середину отрезка

            // Если попали точно в корень
            if (f(c) == 0.0) {
                break;
            }

            // Меняем границы отрезка
            if (f(a) * f(c) < 0) {
                b = c; // Корень находится в левой половине
            } else {
                a = c; // Корень находится в правой половине
            }
        }

        return (a + b) / 2;
    }
}