Ola galera,
alguem conhece um metodo de raiz quadrada com iteração que nao seja o Math.sqrt
E o de raiz cubica tmbm .
Agradeço
Ola galera,
alguem conhece um metodo de raiz quadrada com iteração que nao seja o Math.sqrt
E o de raiz cubica tmbm .
Agradeço
http://en.wikipedia.org/wiki/Methods_of_computing_square_roots (talvez esse artigo da Wikipedia esteja traduzido)
http://www.mathpath.org/Algor/cuberoot/cube.root.newton.htm
Mas o teu problema então não seria Java, mas sim matemática.
Mas o teu problema então não seria Java, mas sim matemática.
[quote=carlucio]Ola galera,
alguem conhece um metodo de raiz quadrada com iteração que nao seja o Math.sqrt
E o de raiz cubica tmbm .
Agradeço[/quote]
E se você multiplicar a variável por ela mesma 2 vezes? É isso que você está querendo?
Como eu faria:
import java.util.Scanner;
class Potencia
{
public static void main (String args [])
{
Scanner sc = new Scanner (System.in);
int base, elevado, resultado;
System.out.println("Digite a base da potenciacao: ");
base = sc.nextInt();
System.out.println("Digite a potencia: ");
elevado = sc.nextInt();
resultado = base;
for (int cont = 1; cont <= elevado; cont++)
{
resultado = resultado * base;
}
System.out.println("O resultado eh: " + resultado);
}
}
P.S.: Não testei e fiz com pressa.
1º - Pra que ??
2º - Por que ??
3º - Quanto vou ganhar ?? (heueheuehu esse é brincadeirinha)
[quote=Rafael Guerreiro][quote=carlucio]Ola galera,
alguem conhece um metodo de raiz quadrada com iteração que nao seja o Math.sqrt
E o de raiz cubica tmbm .
Agradeço[/quote]
E se você multiplicar a variável por ela mesma 2 vezes? É isso que você está querendo?
[/quote]
Rafael-san, você está confundindo “raiz quadrada” com “quadrado”. São coisas diferentes: uma dá debaixo da terra, como a cenoura, no País da Matemática; e o outro é o modo em que você vê o Sol se fizer algo (como um sequestro ou assassinato) e tiver o azar de ser preso.
Oi carlucio,
Não conheço,mas fiquei curiosa,por que não pode usar sqrt… :roll:
Da uma olhadinha aqui vai ajudar…http://programei.org/site/java/68-java/239-funcoes-matematicas-classe-math-java
Para quem precisa de calcular raiz quadrada com BigDecimal. É um pouco lento, mas…
package guj;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Raizes {
private static BigDecimal seed (BigDecimal x) {
int nDigits = x.abs().toBigInteger().toString().length();
int n;
if (nDigits % 2 == 1) {
n = (nDigits - 1) / 2;
return BigDecimal.valueOf(2).scaleByPowerOfTen(n);
} else {
n = (nDigits - 2) / 2;
return BigDecimal.valueOf(6).scaleByPowerOfTen(n);
}
}
public static BigDecimal sqrt (BigDecimal x, int n) {
if (x.equals(BigDecimal.ZERO))
return BigDecimal.ZERO;
// x1 = x0 - f(x0) / f'(x0)
// where f(x) = x^2 - q
// f'(x) = 2x
BigDecimal eps = BigDecimal.ONE.scaleByPowerOfTen(-n);
BigDecimal x0, x1 = seed (x);
do {
x0 = x1;
BigDecimal f = x0.pow(2).subtract(x);
BigDecimal f_ = x0.add(x0);
x1 = x0.subtract(f.divide(f_, n, RoundingMode.HALF_EVEN));
} while (x1.subtract(x0).abs().compareTo(eps) > 0);
return x1;
}
/**
* @param args
*/
public static void main(String[] args) {
// 1234567890123456789012345678901234567890123456789012345678
System.out.println (sqrt (new BigDecimal ("3.1415926535897932384626433832795028841971693993751058209749"), 58));
// 1.7724538509055160272981674833411451827975494561223871282137
// Mostra: 1.7724538509055160272981674833411451827975494561223871282138
}
}
[quote=entanglement][quote=Rafael Guerreiro][quote=carlucio]Ola galera,
alguem conhece um metodo de raiz quadrada com iteração que nao seja o Math.sqrt
E o de raiz cubica tmbm .
Agradeço[/quote]
E se você multiplicar a variável por ela mesma 2 vezes? É isso que você está querendo?
[/quote]
Rafael-san, você está confundindo “raiz quadrada” com “quadrado”. São coisas diferentes: uma dá debaixo da terra, como a cenoura, no País da Matemática; e o outro é o modo em que você vê o Sol se fizer algo (como um sequestro ou assassinato) e tiver o azar de ser preso.
[/quote]
HAHAHA! É verdade… Então basta ele dividir 1 pelo número da raiz e elevar a base, usando a potenciação…
Assim:
4 elevado a (1/2) é a mesma coisa que raiz 2 de (4 elevado a 1)
Galera,
é um trabalho da faculdade, ai nao pode user o math.sqrt
entanglement
Essa do bigdecimal é bem interessante,
porem gostaria de uma mais simples, onde eu pudesse explicar todo o codigo. esse do bigdecimal demoraria alem do prazo de entrega pra entende-la toda.
muito grato
Pois é, eu só implementei (usando BigDecimal) o algoritmo de Newton que está no primeiro link do Bezier Curve.
Cabe a você implementar o mesmíssimo algoritmo, mas usando double. OK?
Tentando reinventar a roda? =D
Eu não li os outros posts, mas pensa assim:
A raiz quadrada é o inverso da potência, se você quer fazer a raiz quadrada, faça um cálculo na mão e observe as fórmulas.
Espero que seja útil:
http://www.guj.com.br/posts/list/205972.java#1046056
[quote=Frantic Avenger]Não sei se isso pode te ajudar mas…
Quando fiz um trabalho para calcular a raiz quadrada o professor tinha me avisado que a entrada de dados iriam ser números quadrados perfeitos, se for seu caso a raiz do número x é a soma dos valores de sua raiz nos primeiros números ímpares. Exemplo.
1 = 1 ( 1 número impar raiz 1)
4 = 1 + 3 (2 números ímpares raiz 2)
9 = 1 + 3 + 5 (3 números ímpares raiz 3)
16 = 1 + 3 + 5 + 7
25 = 1 + 3 + 5 + 7 + 9
…
121 = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21
…
Espero ter ajudado. [/quote]
Flw
Frantic.
essa sua formula da certo pra raizes exatas,
e no caso da raiz nao ser exata ?
pq é um projeto de uma calculadora, entao tem q tirar a raiz de tudo
Realmente isso que falei serve só para raízes exatas. Raízes não extas eu sinceramente não sei como fazer. Bom de qualquer forma boa sorte no seu desenvolvimento e se conseguir calcular a raíz desse jeito compartilha a informação
Flw
A formula de Newton que o entanglemente apresentou resolve.
Galera consegui uma formula pra todos os casos
public double calculaRaiz(double valor) {
double fatorCalculo = 0.00001; //quanto menor o fator maior a precisao. Ex.: 0.0001
while (fatorCalculo * fatorCalculo < valor) {
fatorCalculo += 0.00001;
}
return fatorCalculo;
Só um problema, na raiz de 100 o resultado é
10.00000999979059
Alguem ajuda como tirar os 0 depois da virgula caso o numero seja exato?
Olha cara o que encontrei no wikipedia:
Você pode usar o métodos dos números ímpares que mostrei anteriormente e depois usar o método ensinado no link.
http://pt.wikipedia.org/wiki/Raiz_quadrada
<edit> Como o Marky.Vasconcelos falou usa o código do entanglement que fica mais fácil </edit>
Flw
[quote=carlucio]Galera consegui uma formula pra todos os casos
public double calculaRaiz(double valor) {
double fatorCalculo = 0.00001; //quanto menor o fator maior a precisao. Ex.: 0.0001
while (fatorCalculo * fatorCalculo < valor) {
fatorCalculo += 0.00001;
}
return fatorCalculo;
Só um problema, na raiz de 100 o resultado é
10.00000999979059
Alguem ajuda como tirar os 0 depois da virgula caso o numero seja exato?[/quote]
Cruz credo, isso é que se chama de método tosco para achar uma raiz quadrada. Se valor for 1000000000, quanto tempo vai ficar rodando esse algoritmo?