Двоичный поиск для монотонной функции




Двоичный поиск может использоваться не только для поиска элементов в массиве, но и для поиска корней уравнений и значений монотонных (возрастающих или убывающих) функций.

Пусть нам задана монотонная функция f и какое-то значение C этой функции. Необходимо найти значение аргумента x этой функции, такое, что f(x)=C.

Пример возрастающей монотонной функции:




Выберем такие границы, где значение функции точно больше и точно меньше заданного значения. Выберем значение в середине этого отрезка. Если оно меньше, чем заданное, то сместим левую границу в середину отрезка. В противном случае сместим правую границу. Далее повторим процесс сужения границ. Но есть проблема в том , что когда остановить поиск, подбронее здесь.
 
Для примера рассмотрим задачу поиска квадратного корня числа x. Квадратным корнем из числа x (обозначается √x) называется такое число y, что y2 = x.
Сформулируем задачу так: для данного вещественного числа x (x ≥ 1) найти квадратый корень с точностью не менее 5 знаков после точки.
 
Выбор границы отрезка для поиска
Так как мы не можем проверять всю бесконечность чисел, надо обозначить границы поиска корня. Для начала найдем левую границу, выберем произвольную отрицательную точку (например: -1). Будем удваивать ее до тех пор, пока значение в ней будет больше заданного значения. Для того, чтобы найти правую границу, выберем произвольную положительную точку (например: 1). Будем удваивать ее до тех пор, пока значение функции в этой точке меньше заданного.

Либо, если мы точно знаем границы поиска, можем взять за левую границу 1, а верхнюю само число x.
После этого делим текущий отрезок пополам, возводим середину в квадрат и если он больше x, то заменяем верхнюю грань, иначе  нижнюю.

Итоговая реализация:
 

где:
eps - точность до которой надо искать решение,
x - заданное число, квадратный корень которого ищем,
m - число, в котором после выполнения алгоритма будет хранится результат.
 

Task
Дано натуральное число x. Вычислите кубический корень из числа
 
Входные данные
Число x – натуральное, не превосходящее 106.
 
Выходные данные
Программа должна вывести единственное число: ответ на задачу с точностью не менее 6 знаков после запятой.
 
Ввод Вывод
2 1.259921
C++
Write a program below
#include <iostream>
using namespace std;

double Search_Binary(int x)
{         
	
}

int main()
{
	
	int x;
	cin >> x;
	
	double res = Search_Binary(x);
	printf("%.8lf", res);


}         
Your last submission is saved in the editor window.
     

Results:

All results: