#include <iostream>
#include <string>
#include <cmath>
using namespace std;
float my_sqrt(float n) {
float best = 1;
const float accuracy = 0.01;
const float starting_step = accuracy * accuracy * accuracy;
float step = starting_step;
float step_diff = starting_step;
int steps_no = 0;
while (fabs(best*best - n) > accuracy) {
if (steps_no == 10000) break;
// cout << best << endl;
steps_no++;
if (best*best > n) {
best -= step;
step /= 2;
step_diff = starting_step;
// best -= step;
// step = starting_step;
// step_diff = starting_step;
} else {
step_diff *= 2;
step += step_diff;
best += step;
}
}
cout << "in " << steps_no << " steps" << endl;
return best;
}
int main() {
float result = my_sqrt(32100);
cout << result << " ^ 2 = " << result * result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpmbG9hdCBteV9zcXJ0KGZsb2F0IG4pIHsKCWZsb2F0IGJlc3QgPSAxOwoJY29uc3QgZmxvYXQgYWNjdXJhY3kgPSAwLjAxOwoJY29uc3QgZmxvYXQgc3RhcnRpbmdfc3RlcCA9IGFjY3VyYWN5ICogYWNjdXJhY3kgKiBhY2N1cmFjeTsKCWZsb2F0IHN0ZXAgPSBzdGFydGluZ19zdGVwOwoJZmxvYXQgc3RlcF9kaWZmID0gc3RhcnRpbmdfc3RlcDsKCWludCBzdGVwc19ubyA9IDA7Cgl3aGlsZSAoZmFicyhiZXN0KmJlc3QgLSBuKSA+IGFjY3VyYWN5KSB7CgkJaWYgKHN0ZXBzX25vID09IDEwMDAwKSBicmVhazsKCQkvLyBjb3V0IDw8IGJlc3QgPDwgZW5kbDsKCQlzdGVwc19ubysrOwoJCWlmIChiZXN0KmJlc3QgPiBuKSB7CgkJCWJlc3QgLT0gc3RlcDsKCQkJc3RlcCAvPSAyOwoJCQlzdGVwX2RpZmYgPSBzdGFydGluZ19zdGVwOwoJCQkvLyBiZXN0IC09IHN0ZXA7CgkJCS8vIHN0ZXAgPSBzdGFydGluZ19zdGVwOwoJCQkvLyBzdGVwX2RpZmYgPSBzdGFydGluZ19zdGVwOwoJCX0gZWxzZSB7CgkJCXN0ZXBfZGlmZiAqPSAyOwoJCQlzdGVwICs9IHN0ZXBfZGlmZjsKCQkJYmVzdCArPSBzdGVwOwoJCX0KCX0KCWNvdXQgPDwgImluICIgPDwgc3RlcHNfbm8gPDwgIiBzdGVwcyIgPDwgZW5kbDsKCXJldHVybiBiZXN0Owp9CgppbnQgbWFpbigpIHsKCWZsb2F0IHJlc3VsdCA9IG15X3NxcnQoMzIxMDApOwoJY291dCA8PCByZXN1bHQgPDwgIiBeIDIgPSAiIDw8IHJlc3VsdCAqIHJlc3VsdCA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=