Вдохновленный этим видео от tecmath .
Аппроксимацию квадратного корня любого числа x
можно найти, взяв целочисленный квадратный корень s
(то есть наибольшее целое число такое, что s * s ≤ x
), а затем вычислив s + (x - s^2) / (2 * s)
. Назовем это приближение S(x)
. (Примечание: это эквивалентно применению одного шага метода Ньютона-Рафсона).
Хотя это имеет причуду, где S (n ^ 2 - 1) всегда будет √ (n ^ 2), но в целом это будет очень точно. В некоторых более крупных случаях это может иметь точность> 99,99%.
Вход и выход
Вы возьмете одно число в любом удобном формате.
Примеры
Формат: ввод -> вывод
2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37 // actually 4.37 + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91 // actually 6.91 + 1/300
57 -> 7.57 // actually 7.57 + 1/700
2612 -> 51.10 // actually 51.10 + 2/255
643545345 -> 25368.19 // actually 25,368.19 + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481
Характеристики
Ваш вывод должен быть округлен по крайней мере до ближайшей сотой (т.е. если ответ 47.2851, вы можете вывести 47.29)
Ваши выходные данные не обязательно должны иметь следующие нули и десятичную точку, если ответом является целое число (т. Е. 125,00 можно вывести как 125 и 125,0 тоже)
Вам не нужно поддерживать какие-либо числа ниже 1.
Вам не нужно поддерживать нецелые входные данные. (т.е. 1,52 и т. д.)
правила
Стандартные лазейки запрещены.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)