#include <iostream>
#include <cmath>
using namespace std;
 
double f(double x) {
    return 2 * x * x * x + 3 * x - 1;
}
 
int main() {
    double x1 = 0, x2 = 1, x0, f1, f2, f0;
    double E = 1e-8;
    int i = 0;
 
    f1 = f(x1);
    f2 = f(x2);
 
    if (f1 * f2 > 0) {
        cout << "No root in this interval.\n";
        return 0;
    }
 
    cout << "Iter\t x1\t\t x2\t\t x0\t\t f(x0)\n";
 
    while (fabs((x2 - x1) / x2) > E) {
        i++;
        x0 = (x1 + x2) / 2;
        f0 = f(x0);
 
        cout << i << "\t" << x1 << "\t" << x2 << "\t" << x0 << "\t" << f0 << endl;
 
        if (f1 * f0 < 0)
            x2 = x0;
        else {
            x1 = x0;
            f1 = f0;
        }
    }
 
    cout << "\nApproximate root = " << (x1 + x2) / 2 << endl;
    cout << "Total iterations = " << i << endl;
 
    return 0;
}
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIDIgKiB4ICogeCAqIHggKyAzICogeCAtIDE7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIHgxID0gMCwgeDIgPSAxLCB4MCwgZjEsIGYyLCBmMDsKICAgIGRvdWJsZSBFID0gMWUtODsKICAgIGludCBpID0gMDsKCiAgICBmMSA9IGYoeDEpOwogICAgZjIgPSBmKHgyKTsKCiAgICBpZiAoZjEgKiBmMiA+IDApIHsKICAgICAgICBjb3V0IDw8ICJObyByb290IGluIHRoaXMgaW50ZXJ2YWwuXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGNvdXQgPDwgIkl0ZXJcdCB4MVx0XHQgeDJcdFx0IHgwXHRcdCBmKHgwKVxuIjsKCiAgICB3aGlsZSAoZmFicygoeDIgLSB4MSkgLyB4MikgPiBFKSB7CiAgICAgICAgaSsrOwogICAgICAgIHgwID0gKHgxICsgeDIpIC8gMjsKICAgICAgICBmMCA9IGYoeDApOwoKICAgICAgICBjb3V0IDw8IGkgPDwgIlx0IiA8PCB4MSA8PCAiXHQiIDw8IHgyIDw8ICJcdCIgPDwgeDAgPDwgIlx0IiA8PCBmMCA8PCBlbmRsOwoKICAgICAgICBpZiAoZjEgKiBmMCA8IDApCiAgICAgICAgICAgIHgyID0geDA7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHgxID0geDA7CiAgICAgICAgICAgIGYxID0gZjA7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgIlxuQXBwcm94aW1hdGUgcm9vdCA9ICIgPDwgKHgxICsgeDIpIC8gMiA8PCBlbmRsOwogICAgY291dCA8PCAiVG90YWwgaXRlcmF0aW9ucyA9ICIgPDwgaSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==