в чем я ошибся в поиске квадратного корня черех бинарный поиск? С++

/

/ 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, но это уже сами...

Но, конечно, Ньютон тут подходит куда лучше.

→ Ссылка