Função da Raiz Quadrada em java?

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

1 curtida

int x = 2;

Math.sqrt(x);

ou pode ser o prórprio numero:


Math.sqrt(2);

Espero ter ajudado.

2 curtidas

Obrigado, me ajudou bastante.
Abraços!!

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

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

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

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

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

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.

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:

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)));
    }
}
1 curtida

[quote=marcio_gs][quote=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…
[/quote]

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

Estude complexidade de algoritmos.[/quote]

Apenas exemplifiquei para o entendimento…

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

[quote=andredecotia]

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?[/quote]

entanglement deu um excelente exemplo.

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

[code]
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)));
}
}
[/code][/quote]

Interessante…

1 curtida

[quote=marcio_gs][quote=andredecotia]

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?[/quote]

entanglement deu um excelente exemplo.[/quote]

rs… hehehe… Dê um exemplo seu!

[quote=andredecotia][quote=marcio_gs][quote=andredecotia]

Apenas exemplifiquei para o entendimento…

Simples, dá um exemplo sofisticado então!?[/quote]

entanglement deu um excelente exemplo.[/quote]

rs… hehehe… Dê um exemplo seu![/quote]

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

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…

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

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

[code]
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)));
}
}
[/code][/quote]

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

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

valeu

O algoritmo de Dijkstra pode ser encontrado aqui:

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

Não me perguntem como funciona.

1 curtida

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