#include <iostream>
#include <cmath> // dla std::abs
// Funkcja do obliczania pierwiastka kwadratowego metodą Newtona-Raphsona
double sqrtNewton(double x, double epsilon = 1e-6) {
if (x < 0) {
std::cerr << "Błąd: liczba ujemna!" << std::endl;
return -1; // nie można liczyć pierwiastka z liczby ujemnej
}
if (x == 0) return 0;
double y = x; // początkowe przybliżenie
while (true) {
double y_next = 0.5 * (y + x / y);
if (std::abs(y_next - y) < epsilon) // warunek zbieżności
break;
y = y_next;
}
return y;
}
int main() {
double liczba;
std::cout << "Podaj liczbę dodatnią: ";
std::cin >> liczba;
double wynik = sqrtNewton(liczba);
std::cout << "Przybliżony pierwiastek kwadratowy: " << wynik << std::endl;
std::cout << "Dla porównania, std::sqrt daje: " << std::sqrt(liczba) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+ICAgIC8vIGRsYSBzdGQ6OmFicwoKLy8gRnVua2NqYSBkbyBvYmxpY3phbmlhIHBpZXJ3aWFzdGthIGt3YWRyYXRvd2VnbyBtZXRvZMSFIE5ld3RvbmEtUmFwaHNvbmEKZG91YmxlIHNxcnROZXd0b24oZG91YmxlIHgsIGRvdWJsZSBlcHNpbG9uID0gMWUtNikgewogICAgaWYgKHggPCAwKSB7CiAgICAgICAgc3RkOjpjZXJyIDw8ICJCxYLEhWQ6IGxpY3piYSB1amVtbmEhIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIC0xOyAvLyBuaWUgbW/FvG5hIGxpY3p5xIcgcGllcndpYXN0a2EgeiBsaWN6YnkgdWplbW5lagogICAgfQogICAgaWYgKHggPT0gMCkgcmV0dXJuIDA7CgogICAgZG91YmxlIHkgPSB4OyAvLyBwb2N6xIV0a293ZSBwcnp5YmxpxbxlbmllCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGRvdWJsZSB5X25leHQgPSAwLjUgKiAoeSArIHggLyB5KTsKICAgICAgICBpZiAoc3RkOjphYnMoeV9uZXh0IC0geSkgPCBlcHNpbG9uKSAvLyB3YXJ1bmVrIHpiaWXFvG5vxZtjaQogICAgICAgICAgICBicmVhazsKICAgICAgICB5ID0geV9uZXh0OwogICAgfQogICAgcmV0dXJuIHk7Cn0KCmludCBtYWluKCkgewogICAgZG91YmxlIGxpY3piYTsKICAgIHN0ZDo6Y291dCA8PCAiUG9kYWogbGljemLEmSBkb2RhdG5pxIU6ICI7CiAgICBzdGQ6OmNpbiA+PiBsaWN6YmE7CgogICAgZG91YmxlIHd5bmlrID0gc3FydE5ld3RvbihsaWN6YmEpOwogICAgc3RkOjpjb3V0IDw8ICJQcnp5YmxpxbxvbnkgcGllcndpYXN0ZWsga3dhZHJhdG93eTogIiA8PCB3eW5payA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIkRsYSBwb3LDs3duYW5pYSwgc3RkOjpzcXJ0IGRhamU6ICIgPDwgc3RkOjpzcXJ0KGxpY3piYSkgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9Cg==