Raiz enésima

Pessoal!

Existe alguma função para calcular a raiz enésima de um número?

Dando um colada nas propriedades de radiciação:http://www.tutorbrasil.com.br/estudo_matematica_online/algebra_basica/algebra_basica_02_radiciacao.php.

Podemos escrever a raiz n-ésima de um número n da seguinte forma: n^(1/k), onde k é o radical da raiz. Dai é só usar a classe Math.

Math.pow(n, 1.0/k)

Generalizando: Math.pow(n, Math.pow(p/k)) para (n^p)^(1/k).

T+

[quote=ro99]Pessoal!

Existe alguma função para calcular a raiz enésima de um número?[/quote]

Todo a computação de funções não polinomiais pode ser transformada numa soma de polinómios conhecida como Série. Em especial a Serie de Taylor.
Uma outra forma é usando o método de Newton.

Estas são as ferramentas para poder calcular raiz quadrada, seno, coseno, etc…

para a n-raiz existe um método de newton (http://en.wikipedia.org/wiki/Nth_root , http://en.wikipedia.org/wiki/Nth_root_algorithm).

O Math.pow() faz o calculos para vc se vc usar double, mas existem os métodos sqrt e cbrt para a raiz quadrada e cubica respectivamente. Isto porque quando se sabe a raiz é possivel obter formulas especificas que são mais simples de computar (serie de taylor)

Leia bem a especificação do Math.pow, porque pode ter surpresas

[quote]
If the first argument is finite and less than zero

if the second argument is a finite even integer, the result is equal to the result of raising the absolute value of the first argument to the power of the second argument
if the second argument is a finite odd integer, the result is equal to the negative of the result of raising the absolute value of the first argument to the power of the second argument
[b]if the second argument is finite and not an integer, then the result is NaN.[/b] [/quote]

então Math.pow(-1, 0.5 ) == NaN ( raiz quadrada de -1 não é um numero real)
Só que não dá exception. Vai dar NaN e se isso estiver em outra formula seus calculos vão para o espaço.
Então crie uma função estática numa classe utilitária que testa os parametros e dá erro se eles levarem a situações impossíveis. Também é bom controlar a raiz quadrada e cubica de forma a usar as funções mais eficientes


public double nroot(int n , int root){

       if ( n < 0 ){
         throw new ArithmeticException("Não existe raiz de um numero negativo");
      } 

      if (root == 1){
             return n;
      } else    if (root == 2){
             return Math.sqrt(n);
      } else    if (root == 3){
             return Math.cbrt (n);
      } else   {
             return Math.poq(n, 1d/root);
      }

}

Ok, pessoal vou testar essas idéias que vocês me deram.

Obrigada.