Метод Мюллера(парабол) в решении нелинейных уравнений

Не могу написать метод парабол так, чтобы решал все уравнения. Перерыл просто тонну информации но ни к какому выводу так и не пришел. Проблема в том, что где-то в цикле совершается невозможная операция, по-типу деления на ноль и программа вылетает. Выводит "nan", или "-nan(ind)". И в каком месте ошибка понять невозможно - весь код проверен сто раз. Возможно проблема в вводимых начальных приближениях, но никакой закономерности по поводу этого мне также выяснить не удалось.

Это код расчетной функции.

double parabl(double coef[], int n, double x0, double x1, double x2, double eps) {
    double y0, y1, y2, a, b, d, c, x3, y, z0, z1;

    while (fabs(x2 - x1) > eps)
    {
        y0 = func(coef, n, x0);
        y1 = func(coef, n, x1);
        y2 = func(coef, n, x2);
       
       
             z0 = x0 - x2;
             z1 = x1 - x2;
             a = ((y0 - y2) / z0 - (y1 - y2) / z1) / (z0 - z1);
             b = (y0 - y2) / z0 - a*z0;
             c = y2;
             d = min(fabs((-b + sqrt(pow(b,2) - 4*a*c)) / (2*a)),fabs((-b - sqrt(pow(b,2) - 4*a*c)) / (2*a)));
             x3 = x2 + d;
             if (x3 < x1) {
                 x2 = x1;
                 x1 = x3;
             }
             else {
                 x0 = x1;
                 x1 = x3;
             }
           
    } 
            return x3;
    }

Ответы (0 шт):