#include <iostream> //id=240242103
#include <cmath>
#include <iomanip>
using namespace std;
double horner(double coeff[], int n, double x) {
double result = coeff[n];
for (int i = n - 1; i >= 0; i--)
result = result * x + coeff[i];
return result;
}
double horner_derivative(double coeff[], int n, double x) {
double result = n * coeff[n];
for (int i = n - 1; i >= 1; i--)
result = result * x + i * coeff[i];
return result;
}
int main() {
int degree;
cout << "ENTER THE TOTAL NO. OF POWER:::: ";
cin >> degree;
double coeff[degree + 1];
for (int i = 0; i <= degree; i++) {
cout << "x^" << i << "::";
cin >> coeff[i];
}
cout << "THE POLYNOMIAL IS ::: ";
for (int i = degree; i >= 0; i--) {
if (coeff[i] >= 0 && i != degree) cout << "+";
cout << coeff[i] << "x^" << i << " ";
}
cout << endl;
double x0;
cout << "INITIAL X1 ------ >";
cin >> x0;
double E = 1e-6; // stopping criterion
double x1, f0, f1, Ea;
int iter = 0;
cout << "**************************************\n";
cout << "ITERATION X FX F'X Ea(%)\n";
cout << "**************************************\n";
do {
f0 = horner(coeff, degree, x0);
f1 = horner_derivative(coeff, degree, x0);
x1 = x0 - f0 / f1;
if (iter == 0)
Ea = 0;
else
Ea = fabs((x1 - x0) / x1) * 100;
iter++;
cout << iter << "\t" << x1 << "\t" << f0 << "\t" << f1 << "\t" << Ea << endl;
x0 = x1;
} while (Ea > E);
cout << "**************************************\n";
cout << "THE ROOT OF EQUATION IS " << fixed << setprecision(6) << x1 << endl;
return 0;
}