Я предполагаю, что вы получаете ошибки переполнения стека во время выполнения. Знаки <и> поменялись местами. Кроме того, вы должны использовать .0001, а не 0 для сравнения.
Редактировать 1:
На самом деле, ваш основной алгоритм имеет проблемы. Что произойдет, если в интервале будет более одного нуля? Что произойдет, если грех (а) и грех (митта) имеют один и тот же знак? Что произойдет, если в интервале нет нулей?
Редактировать 2:
Итак, я сделал проблему, и, по сути, ваше решение проблематично; Я попытался бы начать с размышлений, как решить эту проблему.
Основная проблема в том, что в интервале может быть несколько нулей, и вы пытаетесь найти каждый из них. Создание функции, которая возвращает тип double, может вернуть только одно решение. Поэтому вместо создания функции, возвращающей значение double, просто верните void и распечатайте нули по мере их нахождения.
Еще один совет: вы должны продолжать поиск, пока a и b не окажутся в пределах .0001 друг от друга. Ваше окончательное решение не будет использовать .0001 любым другим способом. (То есть, ваша проверка, чтобы увидеть, нашли ли вы ноль, не должна использовать допуск .0001, и при этом он не будет использовать точно 0. Подумайте, как вы действительно узнаете, если вы нашли ноль, когда abs (ab) меньше, чем .0001 .