Можете подсказать, правильно ли считает данная программа?

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    const double e = 2.7182;
    int n=0;

    while (true)
    {
        cout << "enter the number by which to divide the function definition scope: ";
        cin >> n;
        if (!cin) {
            cout << "this input is invalid.  Please try again.\n";
            cin.clear();
            while (cin.get() != '\n');
        }
        else break;
    }


    
    double y, k = 2.0 / n;
    
    double x = k;
    
    y = acos(pow(e, 0)) - 2 * sin(0);
    
    double b = 0, a = fabs(y);
    
    while (x <= 2) {
        y = acos(pow(e, x)) - 2 * sin(x);
        if (a >= abs(y)) {
            b = x;
            a = abs(y);
        }
        x += k;
    }
    cout << "root of the equation is: " << x;
    return 0;

}

вот условие данной задачи: Необходимо приближенно найти корень уравнения f(x) = 0 для функции из своего варианта. Корень нужно найти по следующему алгоритму: перебираем значения от начала до конца значение функции, минимальное по модулю. Аргумент, при котором оно достигается, считаем корнем уравнения. Программа должна запросить у пользователя, на сколько частей разделить область поиска корня, вычислить шаг, с которым нужно проходить значения, пройти в цикле нужные значения, найти корень и вывести его. введите сюда описание изображения


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

Автор решения: Mikhailo

А вы просто запустите, посчитайте — у вас выдает ответ 2. Но правильный корень - 2.31458. Значит, ваша программа неверная.

Если вы ее измените как

double y, k = 2.0 / n;

double x = 1;

y = acos(exp(-x)) - 2 * sin(x);

double b = x, a = fabs(y);

while (x <= 3) {
    y = acos(exp(-x)) - 2 * sin(x);
    if (a >= abs(y)) {
        b = x;
        a = abs(y);
    }
    x += k;
}
cout << "root of the equation is: " << b << endl;

то при очень больших n получите что-то похожее на правду.

→ Ссылка