Problema com Exceções

Boa tarde,

Estou com um pequeno problema quanto à Exceções. Estou tentando gerar uma exceção ao calcular a raiz quadrada de um número em formato double

[code]public double raiz_quadrada() {

	try {
		return Math.sqrt(num);
	}
	catch (Exception ex) 
	{
		ex.printStackTrace();		
				
	}
	
	return -1;	
}[/code]

calcular a tangente tb deste número, a partir do seu seno e cosseno

[code] public double tangente() {

	try {
		
		return (seno()/coseno());
		
	}
	catch (Exception ex) 
	{	
		ex.printStackTrace();
	
	}
		
	return -1;
			
}	[/code]

Claro que está bem errado ai nos códigos acima mas como eu poderia gerar estas exceções?
Obrigado :wink:

Consegui arrumar o método da raiz quadrada mas a tangente está retornando um estouro:
-16331239353195370,000000

Coloquei este trecho:

[code] public double tangente() {

	try {
		
		return (seno()/coseno());
		
	}
	catch (ArithmeticException ex) 
	{	
		return -1;
	
	}
		
	
			
}[/code]

Desculpe-me pela ignorância no assunto, não cheguei a estudar esta parte no livro :wink:
Obrigado e até mais

Vou reformular a pergunta pq acho que entederei mais facil
ArithmeticException lança exceção em raiz quadrada de numeros menores que 1? Na divisao por zero a classe lança mas n estah funcionando no método da tangente :cry:

sqrt

public static double sqrt(double a)

Returns the correctly rounded positive square root of a double value. Special cases:

    * If the argument is NaN or less than zero, then the result is NaN.
    * If the argument is positive infinity, then the result is positive infinity.
    * If the argument is positive zero or negative zero, then the result is the same as the argument.

Otherwise, the result is the double value closest to the true mathematical square root of the argument value.

Parameters:
    a - a value. 
Returns:
    the positive square root of a. If the argument is NaN or less than zero, the result is NaN.

[code]catch (ArithmeticException ex)
{
return -1;

	}[/code]

Um outro detalhe, tan 135° e de 315° é -1… hehehe… isso daí pode retornar um resultado não esperado hein! :wink:

:idea:

Olha só. No caso da raiz quadrada, o problema é que o método sqrt da classe Math não lança exceção em momento algum, mesmo quando você tenta passar um valor negativo para o método!!! :shock:
Neste caso, o método retorna o que chamamos de Not-a-Number, mais conhecido por “NaN”. Este NaN é representado em Java por uma constante do tipo double com o mesmo nome, disponibilizada pela classe Double.
Uma maneira para forçar seu método a lançar alguma exceção seria a seguinte:

	public double squareRoot() {
		if(Double.isNaN(num))
			throw new ArithmeticException("Value is not a number");
		
		double result = Math.sqrt(num);
		
		if(Double.isNaN(result))
			throw new ArithmeticException("Value is negative");
		
		return result;
	}

Ou seja, você deve verificar se o valor retornado é um NaN, através do método Double.isNaN(double). Se for, você lança uma exceção, ou faz o que quiser.
No caso do seno e cosseno, provavelmente deve ser a mesma coisa, caso vc esteja novamente utilizando métodos da classe Math. Se aos métodos sin e cos for passado um NaN ou um número infinito (Double.NEGATIVE_INFINITY ou Double.POSITIVE_INFINITY), será retornado por esses métodos o bendito NaN… Outro agravante é que parece que qualquer operação envolvendo um NaN, resulta em NaN, mesmo que seja, por exemplo “Double.NaN / 0”.
Tente contornar a situação sempre verificando se o resultado da conta se equipara ao Double.NaN.
Obs: Não compare um double diretamente com o Double.NaN. Não sei por quê, mas não funciona… Utilize o Double.isNaN(double)

entendi
retornou NaN mesmo mas agora nao estou entendendo o bendito estouro no método da tangente hehe
Mas obrigado pela ajuda pessoal :wink:

Vou dar uma olhada aqui, se nao conseguir volto a postar mais tarde
[]'s