Можете подсказать, правильно ли считает данная программа?
#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 шт):
А вы просто запустите, посчитайте — у вас выдает ответ 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 получите что-то похожее на правду.