Cálculo de raiz quadrada

Publicado por Elgio Schlemer 07/03/2009

[ Hits: 17.484 ]

Homepage: http://profelgio.duckdns.org:8080/~elgio

Download raiz.sh




Como calcular raiz quadrada em bash? Algumas linguagens tem o sqrt, mas o bash como poderia ser.

  



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

Scripts recomendados

Criar .deb para sua aplicação

EPD (Editor de Pacotes Debian)

Atualização para KDE 3.5.1

Bash script para converter decimal para hexadecimal mole!

Script para correção de arquivos Makefile usando comando patch


  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts