#include <iostream>
#include <cmath>
double babylonianSquareRoot(double n) {
if (n < 0) {
std::cerr << "Error: Cannot compute square root of a negative number." << std::endl;
return -1; // Return -1 for invalid input
}
double x = n; // Initial guess
double y = 1.0; // Second guess
double e = 0.000001; // Tolerance for convergence
while ((x - y) > e) {
x = (x + y) / 2.0; // Update x as the average of x and y
y = n / x; // Update y as n divided by the new x
}
return x; // Return the computed square root
}
int main() {
double number;
std::cout << "Enter a number to compute its square root: ";
std::cin >> number;
double result = babylonianSquareRoot(number);
if (result != -1) { // Check for valid result
std::cout << "The square root of " << number << " is approximately: " << result << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgpkb3VibGUgYmFieWxvbmlhblNxdWFyZVJvb3QoZG91YmxlIG4pIHsKICAgIGlmIChuIDwgMCkgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiRXJyb3I6IENhbm5vdCBjb21wdXRlIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgbnVtYmVyLiIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAtMTsgLy8gUmV0dXJuIC0xIGZvciBpbnZhbGlkIGlucHV0CiAgICB9CgogICAgZG91YmxlIHggPSBuOyAgICAgICAvLyBJbml0aWFsIGd1ZXNzCiAgICBkb3VibGUgeSA9IDEuMDsgICAgIC8vIFNlY29uZCBndWVzcwogICAgZG91YmxlIGUgPSAwLjAwMDAwMTsgLy8gVG9sZXJhbmNlIGZvciBjb252ZXJnZW5jZQoKICAgIHdoaWxlICgoeCAtIHkpID4gZSkgewogICAgICAgIHggPSAoeCArIHkpIC8gMi4wOyAvLyBVcGRhdGUgeCBhcyB0aGUgYXZlcmFnZSBvZiB4IGFuZCB5CiAgICAgICAgeSA9IG4gLyB4OyAgICAgICAgIC8vIFVwZGF0ZSB5IGFzIG4gZGl2aWRlZCBieSB0aGUgbmV3IHgKICAgIH0KCiAgICByZXR1cm4geDsgLy8gUmV0dXJuIHRoZSBjb21wdXRlZCBzcXVhcmUgcm9vdAp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSBudW1iZXI7CgogICAgc3RkOjpjb3V0IDw8ICJFbnRlciBhIG51bWJlciB0byBjb21wdXRlIGl0cyBzcXVhcmUgcm9vdDogIjsKICAgIHN0ZDo6Y2luID4+IG51bWJlcjsKCiAgICBkb3VibGUgcmVzdWx0ID0gYmFieWxvbmlhblNxdWFyZVJvb3QobnVtYmVyKTsKCiAgICBpZiAocmVzdWx0ICE9IC0xKSB7IC8vIENoZWNrIGZvciB2YWxpZCByZXN1bHQKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRoZSBzcXVhcmUgcm9vdCBvZiAiIDw8IG51bWJlciA8PCAiIGlzIGFwcHJveGltYXRlbHk6ICIgPDwgcmVzdWx0IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=