в чем я ошибся в поиске квадратного корня черех бинарный поиск? С++
/
/ ConsoleApplication26.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <vector>
int main()
{
std::vector <double> arr;
double palas = 0;;
while (palas <= 9.9999)
{
palas += 0.0001;
arr.push_back(palas);
std::cout << palas << "\n";
}
int l = 0;
int r = arr.size() - 1;
int mid;
while (l <= r)
{
mid = l + (r - l) / 2;
if (arr[mid] * arr[mid] == 10)
{
std::cout << arr[mid];
}
else if (arr[mid] * arr[mid] > 10)
{
r = mid - 1;
}
else
{
l = mid + 1;
}
}
}
пробовал много что, я думаю что это из за того, что это из за double==, но аналог сравнения не придумал
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
"Не преумножайте сущности сверх необходимости". © Оккам
"Тренируйся вон, на кошках" © Балбес из к/ф "Операция "Ы""
Не нужен никакой вектор. Примерно так:
double sq(double x, double eps = 1e-7)
{
double l = 0, r = x;
while(r-l > eps)
{
double m = (r+l)/2;
double f = m*m - x;
if (f < 0)
l = m;
else
r = m;
}
return (l+r)/2;
}
По-хорошему, для x < 1 надо выбрать другое значение r, и проверить, что x >= 0, но это уже сами...
Но, конечно, Ньютон тут подходит куда лучше.