#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
double f(double x) {
    return 2 * pow(x, 3) + 3 * x - 1;
}
 
int main() {
    double x1, x2, x0, f1, f2, f0, E;
    int i = 1;
 
    cout << "Enter the value of x0: ";
    cin >> x1;
    cout << "Enter the value of x1: ";
    cin >> x2;
 
    cout << "Enter the tolerance (E): ";
    cin >> E;
 
    f1 = f(x1);
    f2 = f(x2);
 
    if (f1 * f2 > 0) {
        cout << "Invalid interval! f(x0) and f(x1) must have opposite signs.\n";
        return 0;
    }
 
    cout << "\nIteration\t" 
         << "x0\t\t" << "x1\t\t" << "x2\t\t"
         << "f0\t\t" << "f1\t\t" << "f2" << endl;
 
    do {
        x0 = (x1 + x2) / 2;
        f0 = f(x0);
 
        cout << fixed << setprecision(9);
        cout << setw(5) << i << "\t"
             << setw(12) << x1 << "\t"
             << setw(12) << x2 << "\t"
             << setw(12) << x0 << "\t"
             << setw(12) << f0 << "\t"
             << setw(12) << f1 << "\t"
             << setw(12) << f2 << endl;
 
        if (fabs(f0) < E) {
            break;
        }
 
        if (f1 * f0 < 0) {
            x2 = x0;
            f2 = f0;
        } else {
            x1 = x0;
            f1 = f0;
        }
 
        i++;
    } while (fabs(x2 - x1) >= E);
 
    cout << "\nApproximate root = " << x0 << endl;
    cout << "Total iterations = " << i << endl;
 
    return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIGYoZG91YmxlIHgpIHsKICAgIHJldHVybiAyICogcG93KHgsIDMpICsgMyAqIHggLSAxOwp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSB4MSwgeDIsIHgwLCBmMSwgZjIsIGYwLCBFOwogICAgaW50IGkgPSAxOwoKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiB4MDogIjsKICAgIGNpbiA+PiB4MTsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiB4MTogIjsKICAgIGNpbiA+PiB4MjsKCiAgICBjb3V0IDw8ICJFbnRlciB0aGUgdG9sZXJhbmNlIChFKTogIjsKICAgIGNpbiA+PiBFOwoKICAgIGYxID0gZih4MSk7CiAgICBmMiA9IGYoeDIpOwoKICAgIGlmIChmMSAqIGYyID4gMCkgewogICAgICAgIGNvdXQgPDwgIkludmFsaWQgaW50ZXJ2YWwhIGYoeDApIGFuZCBmKHgxKSBtdXN0IGhhdmUgb3Bwb3NpdGUgc2lnbnMuXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGNvdXQgPDwgIlxuSXRlcmF0aW9uXHQiIAogICAgICAgICA8PCAieDBcdFx0IiA8PCAieDFcdFx0IiA8PCAieDJcdFx0IgogICAgICAgICA8PCAiZjBcdFx0IiA8PCAiZjFcdFx0IiA8PCAiZjIiIDw8IGVuZGw7CgogICAgZG8gewogICAgICAgIHgwID0gKHgxICsgeDIpIC8gMjsKICAgICAgICBmMCA9IGYoeDApOwoKICAgICAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig5KTsKICAgICAgICBjb3V0IDw8IHNldHcoNSkgPDwgaSA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCB4MSA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCB4MiA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCB4MCA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCBmMCA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCBmMSA8PCAiXHQiCiAgICAgICAgICAgICA8PCBzZXR3KDEyKSA8PCBmMiA8PCBlbmRsOwoKICAgICAgICBpZiAoZmFicyhmMCkgPCBFKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGYxICogZjAgPCAwKSB7CiAgICAgICAgICAgIHgyID0geDA7CiAgICAgICAgICAgIGYyID0gZjA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeDEgPSB4MDsKICAgICAgICAgICAgZjEgPSBmMDsKICAgICAgICB9CgogICAgICAgIGkrKzsKICAgIH0gd2hpbGUgKGZhYnMoeDIgLSB4MSkgPj0gRSk7CgogICAgY291dCA8PCAiXG5BcHByb3hpbWF0ZSByb290ID0gIiA8PCB4MCA8PCBlbmRsOwogICAgY291dCA8PCAiVG90YWwgaXRlcmF0aW9ucyA9ICIgPDwgaSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9