Skip to content

Instantly share code, notes, and snippets.

@nicolas-oliveira
Created October 15, 2024 19:08
Show Gist options
  • Save nicolas-oliveira/d380b545bbe43b0f1c239d7f581f50c7 to your computer and use it in GitHub Desktop.
Save nicolas-oliveira/d380b545bbe43b0f1c239d7f581f50c7 to your computer and use it in GitHub Desktop.
package utils
// Função que calcula a raiz quadrada de um número `x`
// utilizando uma abordagem iterativa.
func Sqrt(x float64) float64 {
// `z` é o valor inicial da raiz aproximada. Começa em 1.0.
var z float64 = 1.0
// Loop que vai de 1 até o valor de `x`, realizando iterações com incrementos de 1.0.
for i := 1.0; i < x; i++ {
// Se o quadrado de `i` for exatamente igual a `x`, encontramos a raiz exata.
if i*i == x {
// `z` recebe o valor de `i`, que é a raiz quadrada exata de `x`.
z = i
// Sai do loop, pois já encontramos o valor da raiz.
break
// Se o quadrado de `i` passar de `x`, quer dizer que a raiz está entre
// a iteração anterior e a atual.
} else if i*i > x {
// Calcula o quadrado do número anterior (`i - 1`).
theta := (i - 1.0) * (i - 1.0)
// Faz uma estimativa da raiz quadrada de `x`, usando a média de `x` e `theta`, dividida por duas vezes a raiz de `theta`.
z = (x + theta) / (2 * Sqrt(theta)) // Note que a função `Sqrt` está sendo chamada recursivamente para calcular a raiz de `theta`.
// Sai do loop após encontrar a aproximação da raiz.
break
}
}
// Retorna a raiz quadrada estimada de `x`.
return z
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment