Como calcular a raiz quadrada em Python?

Já parou para pensar em como calcular a raiz quadrada em um programa escrito em Python?
Se você está explorando o mundo da programação e quer entender como fazer esse cálculo na prática, chegou ao lugar certo.
Saber trabalhar com funções em Python voltadas à matemática é essencial, tanto para quem está aprendendo programação quanto para quem atua com Python para ciência de dados, desenvolvimento de software ou programação científica.
Neste artigo, vamos explorar diferentes formas de calcular a raiz quadrada em Python, desde as abordagens mais simples até casos envolvendo números negativos e complexos.
Como calcular a raiz quadrada de um número?
Você se lembra como calcular a raiz quadrada de um número do jeito tradicional, com papel e lápis, tal como muitos aprendemos na escola?
Vamos começar relembrando essa definição aqui:
A raiz quadrada de um número é um valor que, quando multiplicado por si mesmo, resulta no número original.
Por exemplo, a raiz quadrada de 9 é 3, já que 3 x 3 = 9. Da mesma forma, a raiz quadrada de 16 é 4 e de 25 é 5, pois, respectivamente, 4 x4 = 16 e 5 x 5 = 25.
Agora, indo pro mundo da programação em Python, podemos adotar diversas abordagens para realizar esse cálculo de forma precisa, mesmo quando lidamos com números negativos ou complexos.
Vamos começar analisando as abordagens mais comuns quando lidamos com números reais positivos: métodos `sqrt()`, `pow()` e o operador `**`.
Método `sqrt()`
A forma mais comumente adotada de realizar o cálculo da raiz quadrada em Python é usando a função `sqrt()` da biblioteca padrão `math`.
A biblioteca `math` faz parte da biblioteca padrão da linguagem Python, isto é, não precisamos instalar nenhum pacote adicional para usá-la.
Essa biblioteca fornece funções matemáticas como exponencial, logaritmos, funções trigonométricas e, claro, o cálculo de raízes quadradas.
É amplamente usada em tarefas de cálculo matemático, tanto em scripts simples quanto em aplicações mais complexas de programação científica e engenharia de software.
Para usar qualquer função da `math`, como `sqrt()`, basta importar a biblioteca no início do código com o comando `import math`.
Vamos a um exemplo prático de como calcular a raiz quadrada do número 81 com um script simples:
import math
numero = 81
raiz = math.sqrt(numero)
print("A raiz quadrada de", numero, "é", raiz)
Ao executarmos o programa acima, obtemos a seguinte saída:
A raiz quadrada de 81 é 9.0
Podemos usar a função `math.sqrt()` com qualquer número?
Se você tentar usá-la com um número negativo, obterá uma mensagem com erro (`ValueError`). Essa função só funciona com *números reais não negativos*. Para calcular a raiz quadrada de um número negativo, será necessário usar a biblioteca `cmath` que veremos mais adiante.
Método `pow()`
Outra forma bem prática de fazer o cálculo da raiz quadrada é com a função `pow()`.
A função `pow()` é uma *função nativa da linguagem Python*, sendo assim não é necessário importar nenhuma biblioteca para seu uso em um programa.
Essa função é usada tanto para cálculos simples quanto para scripts mais elaborados, sendo compatível com números inteiros, de ponto flutuante e até complexos.
Além disso, `pow()` é frequentemente utilizada em tarefas que envolvem operações matemáticas dinâmicas ou expressões algébricas em tempo de execução.
Talvez você já tenha visto essa função ser utilizada para o cálculo de potências com a sintaxe `pow(base, expoente)`. Para calcular a raiz quadrada, basta usarmos um expoente fracionário, como `0.5`.
Vamos ver um exemplo de uso para calcular a raiz quadrada de 100:
numero = 16
raiz = pow(numero, 0.5)
print("A raiz quadrada de", numero, "é", raiz)
Ao executarmos o exemplo acima, obtemos a saída:
A raiz quadrada de 100 é 10.0
Operador `**`
Além da função `pow()`, o Python também permite calcular a raiz quadrada de forma ainda mais direta usando o operador de exponenciação `**`.
Esse operador é muito comum em expressões matemáticas escritas em Python. Com ele, podemos elevar qualquer número a uma potência.
Para calcular a raiz quadrada, basta elevar o número à potência `0.5`, já que a raiz quadrada é equivalente a elevar o número à potência de 1/2.
É uma abordagem bem simples, como podemos constatar no trecho de código abaixo em que calculamos a raiz quadrada de 144.
numero = 144
raiz = numero ** 0.5
print("A raiz quadrada de", numero, "é", raiz)
A saída obtida do código acima é:
A raiz quadrada de 144 é 12.0
É importante destacar que, assim como acontece com a função `pow()`, o operador `**` retorna um valor do tipo `float`, mesmo quando o resultado da raiz quadrada é um número inteiro.

Como calcular a raiz quadrada de números negativos
Até aqui, exploramos diferentes formas de calcular a raiz quadrada de números reais positivos, usando `math.sqrt()`, `pow()` e o operador `**`.
Mas o que acontece se tentarmos aplicar essas abordagens a números negativos?
Como destacamos anteriormente, a função `math.sqrt()` (assim como `pow()` e `**`, quando usados diretamente) não aceita números negativos como entrada.
Nesse caso, ao executar o código obtemos um erro do tipo `ValueError`, já que não existe raiz quadrada real para um número negativo.
Se o seu programa precisa lidar com esse tipo de situação, como quando recebe valores inseridos pelo usuário que podem ser negativos, é importante garantir que ele trate esses casos de forma adequada.
Um modo prático de fazer isso em Python é usando um bloco `try/except`, que permite capturar o erro gerado ao tentar calcular a raiz quadrada de um número negativo e, assim, evitar que o programa seja interrompido inesperadamente.
Para lidar corretamente com esses casos, podemos recorrer ao módulo `cmath`, que faz parte da biblioteca padrão do Python e é voltado para operações com números complexos.
Diferente do módulo `math`, que trabalha apenas com números reais, o `cmath` permite calcular a raiz quadrada de números negativos sem gerar erros.
O resultado será um número complexo, representado com a letra `j`, que é a notação adotada em Python para a parte imaginária.
Veja o trecho de código abaixo que realiza o cálculo da raiz quadrada de - 4:
import math
import cmath
numero = -4
try:
raiz = math.sqrt(numero)
except ValueError:
print("Número negativo! Usando cmath para raiz complexa.")
import cmath
raiz = cmath.sqrt(numero)
print("Raiz quadrada:", raiz)
A saída obtida será:
Número negativo! Usando cmath para raiz complexa.
Raiz quadrada: 2j
Como calcular raiz quadrada de números complexos
O módulo `cmath` não é usado apenas para o cálculo da raiz de números negativos, trata-se da ferramenta mais adequada sempre que estamos trabalhando com números complexos de forma explícita.
Em Python, um número complexo é representado pela soma de uma parte real e uma parte imaginária, sendo esta última indicada pela letra `j`. Por exemplo, `3 + 4j` é um número complexo válido.
Se quisermos calcular a raiz quadrada de um número como esse, podemos usar a função `cmath.sqrt()` da mesma forma que usamos `math.sqrt()` com números reais.
Veja um exemplo:
import cmath
numero = 3 + 4j
raiz = cmath.sqrt(numero)
print("A raiz quadrada de", numero, "é", raiz)
A saída será:
A raiz quadrada de (3+4j) é (2+1j)
Boas práticas no cálculo da raiz quadrada em Python
Agora que já conhecemos os principais métodos para calcular raízes quadradas, é hora de explorar algumas boas práticas que podem nos ajudar a elaborar códigos mais organizados e com qualidade.
Escolhendo o método certo
Cada abordagem tem seu contexto ideal de uso. Sendo assim, precisamos entender bem como escolher a mais adequada em cada situação:
- Usamos `math.sqrt()` quando temos certeza de que os números são reais e não negativos. Essa é a forma mais direta e segura para casos simples com entradas conhecidas.
- Adotamos `cmath.sqrt()` ao lidar com números complexos ou quando existe a possibilidade de entradas negativas. Como vimos, ele evita erros e retorna resultados no formato complexo.
- Para operações rápidas e scripts mais simples, o operador ** ou a função pow() são opções muito práticas.
Cuidado com o tipo de dado
Muitas vezes, os valores numéricos não vêm diretamente no formato desejado. Por exemplo, ao receber dados de entrada do usuário via `input()`, o valor retornado será sempre uma `string`.
Antes de realizar qualquer cálculo, é essencial converter esse valor para um número (como `int` ou `float`) e tratar possíveis erros de conversão. O trecho de código a seguir demonstra bem esse cuidado.
entrada = input("Digite um número: ")
try:
numero = float(entrada)
raiz = numero ** 0.5
print("Raiz quadrada:", raiz)
except ValueError:
print("Entrada inválida!")
Verificando o domínio da função
Quando lidamos com raízes quadradas, especialmente com `math.sqrt()`, é importante garantir que o número esteja dentro do domínio válido, ou seja, que não seja negativo, caso estejamos esperando apenas valores reais positivos.
Uma forma de garantir essa verificação é criar uma função simples que valide os dados antes de realizar o cálculo da raiz, como ilustrado no código abaixo:
```
def raiz_segura(n):
if n < 0:
return "Não é possível calcular raiz real de número negativo!"
return n ** 0.5
print(raiz_segura(9)) # OK
print(raiz_segura(-4)) # Alerta
Esse tipo de verificação ajuda a evitar que o programa seja interrompido por exceções inesperadas, principalmente quando as entradas vêm de fontes externas.
Precisão no cálculo
Em alguns casos, como em aplicações científicas ou financeiras, pode ser necessário um maior controle sobre a precisão dos cálculos.
Nesses cenários, podemos usar a biblioteca `decimal`, que permite definir exatamente o número de casas decimais com as quais desejamos trabalhar.
Exemplo:
from decimal import Decimal, getcontext
getcontext().prec = 10 # Define precisão
numero = Decimal('2')
raiz = numero.sqrt()
print("Raiz quadrada com alta precisão:", raiz)
Essa abordagem é especialmente recomendada quando pequenas variações numéricas podem comprometer a precisão dos resultados de uma análise ou operação.
Conclusão
Calcular a raiz quadrada em Python é uma tarefa simples, mas cheia de nuances que vale a pena conhecer. Ao longo deste artigo, vimos:
- Como usar `math.sqrt()`, `pow()` e o operador `**`.
- Como lidar com números negativos e complexos utilizando `cmath`.
- Boas práticas para validar entradas, tratar exceções e garantir precisão nos cálculos.
Esses conhecimentos são importantes não só para quem está começando a programar, mas também para quem atua em áreas como ciência de dados, engenharia, programação científica ou desenvolvimento de software com Python.
Aqui, na Alura, temos diversos cursos e formações para você se desenvolver em áreas como Programação, Dados e Inteligência Artificial. Confira algumas recomendações:
- [Formação Python para Iniciantes]: comece do zero com Python e aprenda lógica, estrutura de dados e os fundamentos da linguagem.
- [Formação Python para Data Science]: aprofunde seus conhecimentos em análise e visualização de dados com Pandas, NumPy, Matplotlib e outras ferramentas.
- [Formação Python para Inteligência Artificial]: aprenda a desenvolver soluções com machine learning e redes neurais utilizando bibliotecas como Scikit-learn e TensorFlow.
[Formação Matemática para Programação e Dados]: entenda os fundamentos matemáticos que dão suporte à programação, análise de dados e algoritmos.