Função da Raiz Quadrada em java?

18 respostas
P

Olá gostaria de saber qual seria a função que faz a raiz quadrada de um certo número em java. :smiley:

18 Respostas

O
int x = 2;

Math.sqrt(x);

ou pode ser o prórprio numero:

Math.sqrt(2);

Espero ter ajudado.

P

Obrigado, me ajudou bastante.
Abraços!!

A

Mas você entendeu a lógica do funcionamento? -> Exponenciação…

M

Mas você entendeu a lógica do funcionamento? -> Exponenciação…

Exponenciação? Obter a raiz de um número é justamente o processo inverso.

A

Mas você entendeu a lógica do funcionamento? -> Exponenciação…

Exponenciação? Obter a raiz de um número é justamente o processo inverso.

Explique… Dê exemplos…

Tem um artigo bastante esclarecedor: http://pt.wikipedia.org/wiki/Raiz_quadrada

Como eu disse, achar a raiz quadrada vc trabalha com exponenciação… Veja x^2 (x elevado a 2)…

Suponha-se q vc queira achar a raiz de 4, vc poderia fazer um loop do 1 ao 4 multiplicando o valor da iteração por ele mesmo (i x i) colocando dentro de if
a condição d q se for igual ao 4 é a raiz…

M

Cara, sua solução é péssima e amadora. Imagine esse algoritmo testando a raiz de 1.567.890.

Estude complexidade de algoritmos.

E

O que você pode usar, se em vez de double, tiver de usar BigDecimal:

  1. http://www.guj.com.br/java/222848-ajuda-raiz-quadrada-sem-sqrt#1141183
  2. http://www.guj.com.br/java/222848-ajuda-raiz-quadrada-sem-sqrt/2#1142343

Não vá por este caminho:

E

Se quiser usar o método de extração de raiz quadrada dado por Dijkstra (isso para BigInteger, não para BigDecimal)

package guj;

import java.math.BigInteger;

public class SquareRootDijkstra {
    private static final int BITS = 32;
    static int square_root (int n) {
        int mask = 1 << (BITS - 2);
        int root = 0;
        int remainder;
        int i = 1;
        
        remainder = n;
        while (mask != 0) {
            if ((root + mask) <= remainder) {
                remainder -= (root + mask);
                root += 2 * mask;
            }
            root >>= 1;
            mask >>= 2;
        }
        return root;
    }
    
    static BigInteger square_root (BigInteger n) {
        int maskLength = n.bitLength(); 
        if (maskLength % 2 == 1) 
            maskLength ++;
        BigInteger mask = BigInteger.ONE.shiftLeft(maskLength);
        BigInteger root = BigInteger.ZERO;
        BigInteger remainder;
        remainder = n;
        while (mask.signum() != 0) {
            int signum = root.add(mask).subtract (remainder).signum();
            if (signum <= 0){
                remainder = remainder.subtract(root.add(mask));
                root = root.add(mask).add(mask);
            }
            root = root.shiftRight (1);
            mask = mask.shiftRight (2);
        }
        return root;
    }
    public static void main (String[] args) {
//        for (int i = 1; i < 10000000; ++i) {
//            int sq = (int) square_root (BigInteger.valueOf (i)).longValue();
//            int sq2 = (int) Math.sqrt (i);
//            if (sq != sq2) {
//                System.out.println (i + "--" + sq + "--" + sq2);
//            }
//        }
        BigInteger bd = new BigInteger ("31415926535897932384626433832795");
        BigInteger sq;
        System.out.printf ("%d - %d - %d%n", bd, sq = square_root (bd), bd.subtract (sq.multiply(sq)));
    }
}
A

marcio_gs:
andredecotia:

Explique… Dê exemplos…

Tem um artigo bastante esclarecedor: http://pt.wikipedia.org/wiki/Raiz_quadrada

Como eu disse, achar a raiz quadrada vc trabalha com exponenciação… Veja x^2 (x elevado a 2)…

Suponha-se q vc queira achar a raiz de 4, vc poderia fazer um loop do 1 ao 4 multiplicando o valor da iteração por ele mesmo (i x i) colocando dentro de if
a condição d q se for igual ao 4 é a raiz…

Cara, sua solução é péssima e amadora. Imagine esse algoritmo testando a raiz de 1.567.890.

Estude complexidade de algoritmos.

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?

M

andredecotia:

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?

entanglement deu um excelente exemplo.

A
entanglement:
Se quiser usar o método de extração de raiz quadrada dado por Dijkstra (isso para BigInteger, não para BigDecimal)
package guj;

import java.math.BigInteger;

public class SquareRootDijkstra {
    private static final int BITS = 32;
    static int square_root (int n) {
        int mask = 1 << (BITS - 2);
        int root = 0;
        int remainder;
        int i = 1;
        
        remainder = n;
        while (mask != 0) {
            if ((root + mask) <= remainder) {
                remainder -= (root + mask);
                root += 2 * mask;
            }
            root >>= 1;
            mask >>= 2;
        }
        return root;
    }
    
    static BigInteger square_root (BigInteger n) {
        int maskLength = n.bitLength(); 
        if (maskLength % 2 == 1) 
            maskLength ++;
        BigInteger mask = BigInteger.ONE.shiftLeft(maskLength);
        BigInteger root = BigInteger.ZERO;
        BigInteger remainder;
        remainder = n;
        while (mask.signum() != 0) {
            int signum = root.add(mask).subtract (remainder).signum();
            if (signum <= 0){
                remainder = remainder.subtract(root.add(mask));
                root = root.add(mask).add(mask);
            }
            root = root.shiftRight (1);
            mask = mask.shiftRight (2);
        }
        return root;
    }
    public static void main (String[] args) {
//        for (int i = 1; i < 10000000; ++i) {
//            int sq = (int) square_root (BigInteger.valueOf (i)).longValue();
//            int sq2 = (int) Math.sqrt (i);
//            if (sq != sq2) {
//                System.out.println (i + "--" + sq + "--" + sq2);
//            }
//        }
        BigInteger bd = new BigInteger ("31415926535897932384626433832795");
        BigInteger sq;
        System.out.printf ("%d - %d - %d%n", bd, sq = square_root (bd), bd.subtract (sq.multiply(sq)));
    }
}

Interessante...

A

marcio_gs:
andredecotia:

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?

entanglement deu um excelente exemplo.

rs… hehehe… Dê um exemplo seu!

A

andredecotia:
marcio_gs:
andredecotia:

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?

entanglement deu um excelente exemplo.

rs… hehehe… Dê um exemplo seu!

Há inúmeras soluções para se achar a raiz quadrada…

L

Como vcs complicam uma coisa tão simples…no 3º post o amigo ja deu a entender que solucionou…provavelmente eh um trabalho de faculdade ou algo simples…não tem a necessidades de extender este topico para descobrir quem eh o rei da raiz quadrada…

T

Isso tudo é culpa do AndreDeCotia - ele começou a falar de exponenciação e outras coisas … :slight_smile:

D
entanglement:
Se quiser usar o método de extração de raiz quadrada dado por Dijkstra (isso para BigInteger, não para BigDecimal)
package guj;

import java.math.BigInteger;

public class SquareRootDijkstra {
    private static final int BITS = 32;
    static int square_root (int n) {
        int mask = 1 << (BITS - 2);
        int root = 0;
        int remainder;
        int i = 1;
        
        remainder = n;
        while (mask != 0) {
            if ((root + mask) <= remainder) {
                remainder -= (root + mask);
                root += 2 * mask;
            }
            root >>= 1;
            mask >>= 2;
        }
        return root;
    }
    
    static BigInteger square_root (BigInteger n) {
        int maskLength = n.bitLength(); 
        if (maskLength % 2 == 1) 
            maskLength ++;
        BigInteger mask = BigInteger.ONE.shiftLeft(maskLength);
        BigInteger root = BigInteger.ZERO;
        BigInteger remainder;
        remainder = n;
        while (mask.signum() != 0) {
            int signum = root.add(mask).subtract (remainder).signum();
            if (signum <= 0){
                remainder = remainder.subtract(root.add(mask));
                root = root.add(mask).add(mask);
            }
            root = root.shiftRight (1);
            mask = mask.shiftRight (2);
        }
        return root;
    }
    public static void main (String[] args) {
//        for (int i = 1; i < 10000000; ++i) {
//            int sq = (int) square_root (BigInteger.valueOf (i)).longValue();
//            int sq2 = (int) Math.sqrt (i);
//            if (sq != sq2) {
//                System.out.println (i + "--" + sq + "--" + sq2);
//            }
//        }
        BigInteger bd = new BigInteger ("31415926535897932384626433832795");
        BigInteger sq;
        System.out.printf ("%d - %d - %d%n", bd, sq = square_root (bd), bd.subtract (sq.multiply(sq)));
    }
}

Entanglement seu código é show, mais é muito monstro,

se puder comenta umas partes ai, ta muito foda de entender....

valeu

E

O algoritmo de Dijkstra pode ser encontrado aqui:

http://lib.tkk.fi/Diss/2005/isbn9512275279/article3.pdf

Não me perguntem como funciona.

D

e o exemplo? fiquei curisoso… pois pra mim era o melhor exemplo

Criado 17 de dezembro de 2011
Ultima resposta 22 de dez. de 2011
Respostas 18
Participantes 9