#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
double f(double x) {
return 2*x*x*x + 3*x - 1;
}
int main() {
double x1, x2, x0, f1, f2, f0, E;
int iteration = 0;
x1 = 0.0;
x2 = 1.0;
E = 1e-8;
f1 = f(x1);
f2 = f(x2);
if (f1 * f2 > 0) {
cout << "Initial values do not bracket a root!" << endl;
return 1;
}
cout << fixed << setprecision(6);
cout << "Iteration\tx1\t\tx2\t\tx0\t\tf(x1)\t\tf(x2)\t\tf(x0)" << endl;
cout << "----------------------------------------------------------------------------------------" << endl;
do {
x0 = (x1 + x2) / 2.0;
f0 = f(x0);
iteration++;
cout << iteration << "\t\t" << x1 << "\t" << x2 << "\t" << x0
<< "\t" << f1 << "\t" << f2 << "\t" << f0 << endl;
if (f0 == 0) {
break;
}
if (f1 * f0 < 0) {
x2 = x0;
f2 = f0;
} else {
x1 = x0;
f1 = f0;
}
} while (fabs((x2 - x1) / x2) >= E && iteration < 100);
double root = (x1 + x2) / 2.0;
cout << "\nApproximate root = " << root << endl;
cout << "Number of iterations = " << iteration << endl;
cout << "f(root) = " << f(root) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSBmKGRvdWJsZSB4KSB7CiAgICByZXR1cm4gMip4KngqeCArIDMqeCAtIDE7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIHgxLCB4MiwgeDAsIGYxLCBmMiwgZjAsIEU7CiAgICBpbnQgaXRlcmF0aW9uID0gMDsKCiAgICB4MSA9IDAuMDsKICAgIHgyID0gMS4wOwogICAgRSA9IDFlLTg7CgogICAgZjEgPSBmKHgxKTsKICAgIGYyID0gZih4Mik7CgogICAgaWYgKGYxICogZjIgPiAwKSB7CiAgICAgICAgY291dCA8PCAiSW5pdGlhbCB2YWx1ZXMgZG8gbm90IGJyYWNrZXQgYSByb290ISIgPDwgZW5kbDsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgIGNvdXQgPDwgIkl0ZXJhdGlvblx0eDFcdFx0eDJcdFx0eDBcdFx0Zih4MSlcdFx0Zih4MilcdFx0Zih4MCkiIDw8IGVuZGw7CiAgICBjb3V0IDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOwoKICAgIGRvIHsKICAgICAgICB4MCA9ICh4MSArIHgyKSAvIDIuMDsKICAgICAgICBmMCA9IGYoeDApOwoKICAgICAgICBpdGVyYXRpb24rKzsKCiAgICAgICAgY291dCA8PCBpdGVyYXRpb24gPDwgIlx0XHQiIDw8IHgxIDw8ICJcdCIgPDwgeDIgPDwgIlx0IiA8PCB4MAogICAgICAgICAgICAgPDwgIlx0IiA8PCBmMSA8PCAiXHQiIDw8IGYyIDw8ICJcdCIgPDwgZjAgPDwgZW5kbDsKCiAgICAgICAgaWYgKGYwID09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoZjEgKiBmMCA8IDApIHsKICAgICAgICAgICAgeDIgPSB4MDsKICAgICAgICAgICAgZjIgPSBmMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB4MSA9IHgwOwogICAgICAgICAgICBmMSA9IGYwOwogICAgICAgIH0KCiAgICB9IHdoaWxlIChmYWJzKCh4MiAtIHgxKSAvIHgyKSA+PSBFICYmIGl0ZXJhdGlvbiA8IDEwMCk7CgogICAgZG91YmxlIHJvb3QgPSAoeDEgKyB4MikgLyAyLjA7CiAgICBjb3V0IDw8ICJcbkFwcHJveGltYXRlIHJvb3QgPSAiIDw8IHJvb3QgPDwgZW5kbDsKICAgIGNvdXQgPDwgIk51bWJlciBvZiBpdGVyYXRpb25zID0gIiA8PCBpdGVyYXRpb24gPDwgZW5kbDsKICAgIGNvdXQgPDwgImYocm9vdCkgPSAiIDw8IGYocm9vdCkgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==