Olá gostaria de saber qual seria a função que faz a raiz quadrada de um certo número em java.
int x = 2;
Math.sqrt(x);
ou pode ser o prórprio numero:
Math.sqrt(2);
Espero ter ajudado.
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:
- http://www.guj.com.br/java/222848-ajuda-raiz-quadrada-sem-sqrt#1141183
- 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)));
}
}
[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…
[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 …
[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.
e o exemplo? fiquei curisoso… pois pra mim era o melhor exemplo