#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
// Function definition
double f(double x) {
    return 2 * x * x * x + 3 * x - 1;
}
 
int main() {
    double x1, x2, x0, f1, f2, f0;
    double E = 1e-8;
    int i = 0;
 
    cout << "Enter the value of x0: ";
    cin >> x1;
    cout << "\nEnter the value of x1: ";
    cin >> x2;
 
    f1 = f(x1);
    f2 = f(x2);
 
    if (f1 * f2 > 0) {
        cout << "\nInvalid interval. f(x0) and f(x1) must have opposite signs.\n";
        return 0;
    }
 
    cout << "\n-------------------------------------------------------------";
    cout << "\nIteration\t x0\t\t x1\t\t x2\t\t f0\t\t f1\t\t f2";
    cout << "\n-------------------------------------------------------------\n";
 
    do {
        i++;
        x0 = (x1 + x2) / 2;
        f0 = f(x0);
 
        cout << fixed << setprecision(6);
        cout << setw(3) << i << "\t\t"
             << x0 << "\t" << x1 << "\t" << x2 << "\t"
             << f0 << "\t" << f1 << "\t" << f2 << endl;
 
        if (f1 * f0 < 0) {
            x2 = x0;
            f2 = f0;
        } else {
            x1 = x0;
            f1 = f0;
        }
 
    } while (fabs((x2 - x1) / x2) > E);
 
    cout << "\nApproximate root = " << x0 << endl;
 
    return 0;
}
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuY3Rpb24gZGVmaW5pdGlvbgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIDIgKiB4ICogeCAqIHggKyAzICogeCAtIDE7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIHgxLCB4MiwgeDAsIGYxLCBmMiwgZjA7CiAgICBkb3VibGUgRSA9IDFlLTg7CiAgICBpbnQgaSA9IDA7CgogICAgY291dCA8PCAiRW50ZXIgdGhlIHZhbHVlIG9mIHgwOiAiOwogICAgY2luID4+IHgxOwogICAgY291dCA8PCAiXG5FbnRlciB0aGUgdmFsdWUgb2YgeDE6ICI7CiAgICBjaW4gPj4geDI7CgogICAgZjEgPSBmKHgxKTsKICAgIGYyID0gZih4Mik7CgogICAgaWYgKGYxICogZjIgPiAwKSB7CiAgICAgICAgY291dCA8PCAiXG5JbnZhbGlkIGludGVydmFsLiBmKHgwKSBhbmQgZih4MSkgbXVzdCBoYXZlIG9wcG9zaXRlIHNpZ25zLlxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBjb3V0IDw8ICJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOwogICAgY291dCA8PCAiXG5JdGVyYXRpb25cdCB4MFx0XHQgeDFcdFx0IHgyXHRcdCBmMFx0XHQgZjFcdFx0IGYyIjsKICAgIGNvdXQgPDwgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKCiAgICBkbyB7CiAgICAgICAgaSsrOwogICAgICAgIHgwID0gKHgxICsgeDIpIC8gMjsKICAgICAgICBmMCA9IGYoeDApOwoKICAgICAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig2KTsKICAgICAgICBjb3V0IDw8IHNldHcoMykgPDwgaSA8PCAiXHRcdCIKICAgICAgICAgICAgIDw8IHgwIDw8ICJcdCIgPDwgeDEgPDwgIlx0IiA8PCB4MiA8PCAiXHQiCiAgICAgICAgICAgICA8PCBmMCA8PCAiXHQiIDw8IGYxIDw8ICJcdCIgPDwgZjIgPDwgZW5kbDsKCiAgICAgICAgaWYgKGYxICogZjAgPCAwKSB7CiAgICAgICAgICAgIHgyID0geDA7CiAgICAgICAgICAgIGYyID0gZjA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeDEgPSB4MDsKICAgICAgICAgICAgZjEgPSBmMDsKICAgICAgICB9CgogICAgfSB3aGlsZSAoZmFicygoeDIgLSB4MSkgLyB4MikgPiBFKTsKCiAgICBjb3V0IDw8ICJcbkFwcHJveGltYXRlIHJvb3QgPSAiIDw8IHgwIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K