Inspirado neste vídeo por tecmath .
Para obter uma aproximação da raiz quadrada de qualquer número x
, pegue a raiz quadrada inteira s
(ou seja, o maior número inteiro que s * s ≤ x
) e faça o cálculo s + (x - s^2) / (2 * s)
. Vamos chamar essa aproximação S(x)
. (Nota: isso é equivalente à aplicação de uma etapa do método Newton-Raphson).
Embora isso tenha uma peculiaridade, onde S (n ^ 2 - 1) sempre será √ (n ^ 2), mas geralmente será muito preciso. Em alguns casos maiores, isso pode ter uma precisão> 99,99%.
Entrada e saída
Você receberá um número em qualquer formato conveniente.
Exemplos
Formato: Entrada -> Saída
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
Especificações
Sua saída deve ser arredondada para pelo menos a centésima mais próxima (ou seja, se a resposta for 47,2851, você pode gerar 47,29)
Sua saída não precisa ter os seguintes zeros e um ponto decimal se a resposta for um número inteiro (por exemplo, 125,00 também pode ser emitido como 125 e 125,0)
Você não precisa suportar números abaixo de 1.
Você não precisa oferecer suporte a entradas não inteiras. (ou seja, 1,52 etc ...)
Regras
As brechas padrão são proibidas.
Este é um código-golf , pelo que a resposta mais curta em bytes vence.
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)