Boa noite a todos!
Gostaria de saber se alguêm por acaso sabe fazer a raiz quadrada ou cúbica de algum número usando operadores de deslocamentos de bits?
Meu professor me passou essa e eu estou rachando a cabeça de tanto pensar e não to conseguindo!!
Será que ninguêm sabe??
Preciso pelo menos de uma luz!!!
Obrigado!!!
Eu peguei esta mão aqui, e fui no Google:
Cara, raiz quadrada com deslocamento de bits eu nunca ouvi falar. Existe uma classe Math q tem um método para calcular a raiz.
Math.sqrt(10.0);
Você pode deslocar bits usando os operadores << >>, q deslocam bit à direita e à esquerda. Agora calcular raiz utilizando bit a bit eu n sei, e gostaria de saber tb.
Espero ter ajudado! :lol:
Bom vou copiar o que me responderam sobre os deslocamento de bit talvez possa te ajudar. (autor do comentario caique_castanho)
Vamos pegar o algoritmo que o Aldrin achou (o artigo é muito interessante, aliás, e ensina como é que funciona o algoritmo de extração de raízes quadradas que se ensinava na escola há uns 30 anos atrás - ainda ensinam isso?)
package exemplos;
public class RaizQuadrada {
// Adaptado para o Java - o original era em C para 32 bits.
// Números mágicos:
// 64 = número de bits em um long
// 32 = metade de 64
// 62 = 64 - 2
static int sqrt(long a) {
long rem = 0;
long root = 0;
long divisor = 0;
for (int i = 0; i < 32; i++) {
root <<= 1;
rem = ((rem << 2) + (a >>> 62));
a <<= 2;
divisor = (root << 1) + 1;
if (divisor <= rem) {
rem -= divisor;
root++;
}
}
return (int) root;
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(sqrt(123456));
System.out.println((int) Math.sqrt(123456));
}
}
Caraca… funciona… :-o
thingol , podia explicar melhor o algoritmo?? Valeu
Acho que a explicação do sr. Jack W. Crenshaw (que escreveu o artigo original sobre o tal algoritmo, que ele implementou em C mas passei para Java) é mais que suficiente. Veja de novo o link do Aldrin: http://www.embedded.com/98/9802fe2.htm
Boa tarde a todos!!
thingol gostei muito da estrutura porém não entendi muito bem!!
-O resultado obteve 351
-E o meu professor não me ensinou ainda este comando sqrt!! O que é sqrt??
sqrt = “square root” (raiz quadrada).
Não se prenda só ao que seu professor ensina.
Ele é como um guia de excursão; se você fizer uma viagem e visitar só os lugares que seu guia indica, você vai perder muitas coisas importantes.
Obrigado tingol!!!