Raiz Quadrada (Square Root) para Bash

Publicado por Sergio Spoladore 06/11/2006

[ Hits: 9.320 ]

Homepage: http://yetlinux.blogspot.com

Download sqrt.sh




Este raro script calcula a raiz quadrada de um número natural entre 0 e 2^63 - 1. Caso ultrapasse este valor, haverá erro de cálculo. Creio ter corrigido todos os bugs. Serve como exercício de programação.

Deixo que vocês o compreendam.

  



Esconder código-fonte

#!/bin/bash 

verif (){
   str1="$1"
   [[ -z "$str1" ]] && {
      echo "Use $0 <numero>";
      echo "<numero> entre 0 e 9223372036854775807.";
      echo "Caso ultrapasse, havera erro de calculo.";
      exit 1;
   }

   str2=${str1//[0123456789]/}
   [[ -n "$str2" ]] && {
      echo "Use somente digitos de 0 a 9." 
      exit 1;
   }

}

cortazero(){
   a1=$1;
   while [ "$a1" != "$b1" ]; do
      b1=$a1;
      a1=${a1##0};
   done;
   echo $a1;
}

sqrt(){
   tmp1=$1;
   [[ $((${#tmp1}%2)) -eq 1 ]] && tmp1='0'$tmp1;
   j=0;
   rq='0';
   rt='';

   while [ -n "${tmp1:$j:2}" ]; do
      rt=$rt${tmp1:$j:2};
      rt=`cortazero $rt`;
      [[ -z "$rt" ]] && rt='0';
      rq=`cortazero $rq`;
      [[ -z "$rq" ]] && rq='0';   
      for ((i=1;i<=10;i++));do
         [[ $rt -lt $(( (`cortazero $((2*$rq))`$i) *$i)) ]] && { 
            rt=$((rt-(`cortazero $((2*$rq))`$((i-1)))*$((i-1))));
            rq=$rq$((i-1));
            break;
         }
      done;
      let j+=2;
   done;
   rq=`cortazero $rq`;
   [[ -z "$rq" ]] && rq='0';
   echo $rq;
}

verif $1;
sqrt $1;


Scripts recomendados

Procurando um padrão num arquivo

Instalação do Microsoft Edge no Linux

package maker para o slackware

Gerência do Squid

Rsync.conf


  

Comentários
[1] Comentário enviado por viniciuspgomes em 20/09/2007 - 10:06h

Como calculo a raíz quadrada sem desprezar os valores decimais..
Tem como alterar isso no seu código?
abraço


Contribuir com comentário