#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==