#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
// Funkcja, której pierwiastek szukamy
double f(double x, double c) {
return x*x - c;
}
// Funkcja bisekcji
double sqrt_bisekcja(double c, double eps, int &liczba_iteracji) {
double a = 0; // dla c > 0 pierwiastek jest > 0
double b = max(1.0, c); // górna granica przedziału
double c_mid;
liczba_iteracji = 0;
while ((b - a) / 2 > eps) {
c_mid = (a + b) / 2.0;
liczba_iteracji++;
if (fabs(f(c_mid, c)) < eps) {
return c_mid; // znaleziono przybliżenie pierwiastka
}
if (f(a, c) * f(c_mid, c) < 0) {
b = c_mid;
} else {
a = c_mid;
}
}
// Zwracamy środek przedziału jako przybliżenie pierwiastka
return (a + b) / 2.0;
}
int main() {
double c = 15.0; // liczba, z której szukamy pierwiastka
double eps = 0.001; // dokładność
int iteracje = 0;
double wynik = sqrt_bisekcja(c, eps, iteracje);
cout << fixed << setprecision(6);
cout << "Przyblizona wartosc pierwiastka kwadratowego z " << c << " wynosi: " << wynik << endl;
cout << "Liczba iteracji potrzebnych do uzyskania dokladnosci eps = " << eps << " : " << iteracje << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEZ1bmtjamEsIGt0w7NyZWogcGllcndpYXN0ZWsgc3p1a2FteQpkb3VibGUgZihkb3VibGUgeCwgZG91YmxlIGMpIHsKICAgIHJldHVybiB4KnggLSBjOwp9CgovLyBGdW5rY2phIGJpc2VrY2ppCmRvdWJsZSBzcXJ0X2Jpc2VrY2phKGRvdWJsZSBjLCBkb3VibGUgZXBzLCBpbnQgJmxpY3piYV9pdGVyYWNqaSkgewogICAgZG91YmxlIGEgPSAwOyAgICAgICAvLyBkbGEgYyA+IDAgcGllcndpYXN0ZWsgamVzdCA+IDAKICAgIGRvdWJsZSBiID0gbWF4KDEuMCwgYyk7IC8vIGfDs3JuYSBncmFuaWNhIHByemVkemlhxYJ1CiAgICBkb3VibGUgY19taWQ7CiAgICBsaWN6YmFfaXRlcmFjamkgPSAwOwoKICAgIHdoaWxlICgoYiAtIGEpIC8gMiA+IGVwcykgewogICAgICAgIGNfbWlkID0gKGEgKyBiKSAvIDIuMDsKICAgICAgICBsaWN6YmFfaXRlcmFjamkrKzsKCiAgICAgICAgaWYgKGZhYnMoZihjX21pZCwgYykpIDwgZXBzKSB7CiAgICAgICAgICAgIHJldHVybiBjX21pZDsgLy8gem5hbGV6aW9ubyBwcnp5YmxpxbxlbmllIHBpZXJ3aWFzdGthCiAgICAgICAgfQoKICAgICAgICBpZiAoZihhLCBjKSAqIGYoY19taWQsIGMpIDwgMCkgewogICAgICAgICAgICBiID0gY19taWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYSA9IGNfbWlkOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBad3JhY2FteSDFm3JvZGVrIHByemVkemlhxYJ1IGpha28gcHJ6eWJsacW8ZW5pZSBwaWVyd2lhc3RrYQogICAgcmV0dXJuIChhICsgYikgLyAyLjA7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIGMgPSAxNS4wOyAgICAgIC8vIGxpY3piYSwgeiBrdMOzcmVqIHN6dWthbXkgcGllcndpYXN0a2EKICAgIGRvdWJsZSBlcHMgPSAwLjAwMTsgICAvLyBkb2vFgmFkbm/Fm8SHCiAgICBpbnQgaXRlcmFjamUgPSAwOwoKICAgIGRvdWJsZSB3eW5payA9IHNxcnRfYmlzZWtjamEoYywgZXBzLCBpdGVyYWNqZSk7CgogICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oNik7CiAgICBjb3V0IDw8ICJQcnp5Ymxpem9uYSB3YXJ0b3NjIHBpZXJ3aWFzdGthIGt3YWRyYXRvd2VnbyB6ICIgPDwgYyA8PCAiIHd5bm9zaTogIiA8PCB3eW5payA8PCBlbmRsOwogICAgY291dCA8PCAiTGljemJhIGl0ZXJhY2ppIHBvdHJ6ZWJueWNoIGRvIHV6eXNrYW5pYSBkb2tsYWRub3NjaSBlcHMgPSAiIDw8IGVwcyA8PCAiIDogIiA8PCBpdGVyYWNqZSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==