Pular para o conteúdo

Cálculo de raiz quadrada

Como calcular raiz quadrada em bash? Algumas linguagens tem o sqrt, mas o bash como poderia ser.
Elgio Schlemer elgio
Hits: 17.917 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Como calcular raiz quadrada em bash? Algumas linguagens tem o sqrt, mas o bash como poderia ser.
Download raiz.sh Enviar nova versão

Esconder código-fonte

#!/bin/bash

# Comentarios: muitas linguagens tem o operador de raiz quadrada ou uma funcao
# implementada que a realiza. Normalmente esta funcao recebe o nome de sqrt
# pyton e pearl tem este operador

# Em linux pode-se usar as calculadoras dc para ter o mesmo efeito:
#
# echo "144 v p"|dc
#
# mas digamos que isto nao tem graca, pois se usou um comando externo, o dc,
# que foi feito em C. Legal mesmo eh o calculo em bash puro
# Para isto teria-se que usar a calculadora interna do bash, invocada por
# $(( ... ))
# 
# a funcao matematica que se segue eh muito usada e pode ser refinada. Quanto
# mais passos, mas se aproxima-se do valor
#
# Para usar, chame ./raiz.sh N
# onde N eh o numero da raiz quadrada (podem passar varios valores, como 
# ./raiz 144 445 56 67
#

MAX=50  # Numero maximo de iteracoes que se faz. 

for N in $*
do      
   I=0
   R=$(( $N / 2))
   while (( $I < $MAX ))
   do 
      I=$(( $I + 1))
      ANT=$R
      R=$(( ($N/$R + $R) / 2 ))
      if [ $ANT == $R ] 
      then 
         break
      fi
   done
   echo Raiz quadrada de $N eh $R
done

# este codigo retorna apenas a parte INTEIRA da raiz quadrada pois a 
# calculadora do bash nao trabalha com pontos flutuantes. Para ter 
# casas decimais teria que usar o bc ou dc, e ai perderia a graca

Autenticação automática no Speedy Home

Desligamento programado com interface gráfica em Zenity

APPSOM - Listar e reproduzir músicas, vídeos e imagens

Limpar o lixo das caixas de e-mail dos usuários que usam Maildir...

Compilação de módulos para VMware 12.5.7 no Fedora 26

#1 Comentário enviado por SMarcell em 09/03/2009 - 09:24h
Quanto a questão de operações com ponto flutuante, no Ksh e Zsh isso não é problema!

No ksh, operações com ponto flutuante dão um 'pouquinho' mais de trabalho:
$ LC_NUMERIC=C
$ float x=13.2 y=4.6
$ echo $((x + y))
17.8

Já no zsh:
$ echo $((13.2 + 4.6))
17.7999...

Só complementando o post... =)

---Editado---
#2 Comentário enviado por elgio em 09/03/2009 - 09:31h
Legal!

Então em zsh e ksh tem uma solução possível só com comandos INTERNOS (no bash tem que invocar o bc ou dc, mas se é para invocar o dc, o dc TEM sqrt).

Valeu pelo aprendizado.

Contribuir com comentário

Entre na sua conta para comentar.