Cálculo de raiz quadrada

Publicado por Elgio Schlemer 07/03/2009

[ Hits: 17.089 ]

Homepage: https://profelgio.duckdns.org/~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

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS

TCPDump do Dia

Firewall - Satefull inspection com NAT

Ajuste Dinâmico do Governador de CPU no Linux

Monitorar status de transferência das interfaces de rede


  

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