Re:raiz quadrada [RESOLVIDO]

Não se chama modulo. chama-se Valor Absoluto (Absolute Value)

Em programação a função valor absoluto é chamada abs. Vc pode encontrar ela na classe Math.

Algumas outras considerações:

Não é boa prática usar _ nos atributos. Use a palavra reservada this
Coisas que se calculam num método apenas como auxiliares não precisam ser atributos da classe
Validações de consistencia devem ser feitas antes de qq outra coisa.
Se os argumentos não são utilizáveis deve lançar uma exeção IllegalArgumentException


class Raizes{  
    
  double epsilon;  
 

  public Raizes(double epsilon){  
    this.epsilon = epsilon;  
  }  
    
  public double raizQuadrada(double numero, double chuteInicial){  
      
     if(numero ==0){
         return 0;
    } else if (numero <0 ){
          thrown new IllegalArgumentException("Só pode ser calculada a raiz quadrada de numeros positivos");
    } else if (chuteInicial <0 ){
          thrown new IllegalArgumentException("O chute deve ser maior ou igual a zero");
    } 

     double anterior = chuteInicial;  
     double atual = anterior - (anterior*anterior - numero)/(2*anterior);   
      
      while (Math.abs(anterior -atual) >= _epsilon){  
          
        anterior = atual;  
        atual = anterior - (anterior*anterior - numero)/(2*anterior);  
      }  
      return atual;  
   

  }  
}  

opa sergio valew mano, mas nesse exercicio programa eu preciso realmente implementar da maneira mais simples possivel, eu entendi o que vc falou, mas nele não posso usar o math, seria muito mais facil, mas sou meio iniciante,
mas conheço o Math, se eu pudesse usar seria mais facil,
quanto au exption, naum conheço, obrigado mano, mas tenho que fazer bem simples, para pensar na implementação! mas guardarei suas recomendações, com certeza sera util!! valew!

ola pessoal, então consegui entender melhor o metodo de newton, realmente da pra fazer sem um chute inicial, ou seja é so colocar uma constante, no caso do meu codigo seria o numero, ou um x qualquer, e as variaveis seriam r+1 e rn, ou seja atual e anterior. as contas batem , mas fiz esse codigo que postei a baixo, e esta dando um erro que desconheço NaN, AGUEM PODEME AJUDAR?

class Raizes1{
  
  double _epsilon;
  double atual = 0;
  
  
  
  
  public Raizes1(double epsilon){
    
    _epsilon = epsilon;
  }
  
  public double mod(double numero){
    if(numero < 0)
      numero = numero*-1;
    return numero;
  }
  
  public double raizQuadrada(double numero){
    
    double anterior = numero;
    atual = 1/2*(anterior + numero/anterior);
    
    if(numero > 0){
      
      
      while (mod(atual - anterior) >= _epsilon){
        
        anterior =atual;
        atual = 1/2*(anterior + numero/anterior);
        
      }
      return atual;
    }
    
    else{
      System.out.println("erro!!");
    }
    return -1;
  }
}

O que ocorre quando você divide um número por zero, no
Java?

humm, mas pensei que tivesse inicializado quando igualei anterior à numero, e outra pergunta, o para metro numero eu naum quero que mude , quero que seja fixo, por acaso do jeito que fiz ele muda em agum momento, por exemplo quando igualo ela a anterior? obrigado entanglement!!

Não entendi nada o que você escreveu.
Só vi que vai ocorrer, no seu programa, uma divisão por zero.
Se isso ocorrer, você vai obter um Math.NaN logo de cara.
Pense um pouco melhor, e veja o que dá para fazer.

NaN significa Not a Number. É um valor especial para o resultado de algumas operações especiais, como a divisão de zero por zero, infinito por infinito, etc.

ta ok pessoal vou dar uma olhada, mas é que como eu acabei igualando ao parametro passado, pensei que naum iria ficar zerado!! vou ver valew

[quote=rodsoliver]opa sergio valew mano, mas nesse exercicio programa eu preciso realmente implementar da maneira mais simples possivel, eu entendi o que vc falou, mas nele não posso usar o math, seria muito mais facil, mas sou meio iniciante,
mas conheço o Math, se eu pudesse usar seria mais facil,
quanto au exption, naum conheço, obrigado mano, mas tenho que fazer bem simples, para pensar na implementação! mas guardarei suas recomendações, com certeza sera util!! valew![/quote]

uma coisa que vc tem que aprender desee já é que “simples” não significa “do jeito que der” nem “incompleto”.
Não sei porque vc não pode usar o Math. Se é imposição do professor ou algo assim, seja. Mas vc tem que saber na sua cabeça que o jeito correto de fazer é chamando Math.abs. O que ele faz é mais complexo que o seu método mod. Num codigo real vc seria poibido de não usar Math, portanto já se vá habitando a procurar a maneira correta de fazer. Se no final, alguem o proibir disso, vc tem que saber argumentar contra isso.

O mesmo quando a exceções. Vc não conseguirá ir longe em java sem as entender. Tudo bem que é opcional e o seu código tb funciona ( até um certo ponto). Não estou dizendo que o seu código não funciona ou que está errado, estou dizendo que tem que se preocupar em aprender o que é correto e por quê o mais cedo possível.

[quote=sergiotaborda][quote=rodsoliver]opa sergio valew mano, mas nesse exercicio programa eu preciso realmente implementar da maneira mais simples possivel, eu entendi o que vc falou, mas nele não posso usar o math, seria muito mais facil, mas sou meio iniciante,
mas conheço o Math, se eu pudesse usar seria mais facil,
quanto au exption, naum conheço, obrigado mano, mas tenho que fazer bem simples, para pensar na implementação! mas guardarei suas recomendações, com certeza sera util!! valew![/quote]

uma coisa que vc tem que aprender desee já é que “simples” não significa “do jeito que der” nem “incompleto”.
Não sei porque vc não pode usar o Math. Se é imposição do professor ou algo assim, seja. Mas vc tem que saber na sua cabeça que o jeito correto de fazer é chamando Math.abs. O que ele faz é mais complexo que o seu método mod. Num codigo real vc seria poibido de não usar Math, portanto já se vá habitando a procurar a maneira correta de fazer. Se no final, alguem o proibir disso, vc tem que saber argumentar contra isso.

O mesmo quando a exceções. Vc não conseguirá ir longe em java sem as entender. Tudo bem que é opcional e o seu código tb funciona ( até um certo ponto). Não estou dizendo que o seu código não funciona ou que está errado, estou dizendo que tem que se preocupar em aprender o que é correto e por quê o mais cedo possível.
[/quote]

Sérgio, vá com calma… acho que a idéia do professor do rapaz é ensinar lógica de programação, não a programação em si. Assim, ele tem que saber raciocinar primeiro, antes de usar os métodos de API.

Que, aliás, tá precisando… porque pra fazer o mesmo que o método Math.abs, só fazer um

if (numero < 0)
   return numero * -1;
return numero;

[]´s

opa pessoal obrigado pelas dicas e pela paciencia, sergio, valew os toques, vou tentar seguir essas dicas,mas tenho que aprender mesmo um pouco mais de lógica, e asaudate
valew a paciencia, todos estão sendo de grande ajuda, pois quando aprender, quero ter o mesmo impeto para ajudar outras pessoas!!

[quote=rmendes08][quote=Naruffy]Bom, não entendi muito bem oque você quer, mas se for só raiz quadrada que vc quer msm não precisa fazer iteração, basta fazer o número vezes ele mesmo.

[]s[/quote]

Não camarada, isso é quadrado do número, ou potência de 2. A raiz quadrada é a operação inversa disso;[/quote]

Nossa viajei msm =/

ola pessoal vim novamente, para agradecere falar que resolvi o problema!!! realmente o problema estava em alguma divisão, e era a mais simples, a divisão de 1/2, que o java devolve como inteira e o resultado igual a zero, o q portanto zerava minha primeira conta, e lógico que naum dava pra continuar. mas graças a vcs e um pouco de persistencia consegumos resolver, obrigado novamente!!!