Olá galera!
Meu professor lançou um desafio para o cálculo de cosseno que é o seguinte:
Entrada N = número de termos da série depois do 1 (da fórmula do cosseno);
Entrada X = ângulo em graus;
Dado o ângulo x (em graus), calcular o cosseno.
A fórmula é:
[color=green]cos(x)[/color] [color=red]=[/color] [color=blue]1[/color] [color=red]-[/color] [color=blue]x^2/2![/color] [color=red]+[/color] [color=blue]x^4/4![/color] [color=red]-[/color] [color=blue]x^6/6![/color] [color=red]+[/color] [color=blue]x^8/8![/color] [color=red]-[/color] … e assim por diante até chegar ao número de termos que o usuário deseja (Entrada N)
Obs.: O ângulo X na fórmula acima deve ser transformado em radianos para o cálculo.
Eu cheguei ao seguinte código:
import javax.swing.JOptionPane;
public class COSSENO
{ public static void main(String[] args)
{
//usuário entra com o número de termos e o ângulo em graus
int num = Integer.parseInt(JOptionPane.showInputDialog("Digite o número de termos da série depois do 1. Quanto mais termos, mais preciso é o resultado."));
double graus = Double.parseDouble(JOptionPane.showInputDialog("Digite o ângulo em graus:"));
//converter os graus para radianos
double rad = (graus*3.14)/180;
int cont = 0;
long fat = 1;
int exp = 2;
double cos = 1;
int operacao = 1;
//condição para o número de termos que o usuário deseja
while (cont < num)
{
//fazer o fatorial
for (int i = 1; i <=exp; i++)
{
fat *= i;
}
//calcula o cosseno com a operação da vez (soma ou subtração)
if (operacao == 1)
{
cos = cos+operacao*Math.pow(rad, exp)/fat;
operacao = -1;
} else
{
cos = cos+operacao*Math.pow(rad, exp)/fat;
operacao = 1;
}
exp += 2;
cont++;
}
//subtrai 1 do resultado
cos = 1-cos;
//retorna as informações para o usuário
JOptionPane.showMessageDialog(null, graus+"° "+" = "+rad+" radianos .::. Cosseno de "+rad+" = "+cos);
System.exit(0);
}
}
O código compila, converte graus em radianos corretamente, mas não retorna o cosseno correto.
Por exemplo, se testarmos com um ângulo de 45° ele retorna 0.785 em radianos e -0.30020 como cosseno, onde o cosseno correto seria 0.70738.
Não consigo identificar o erro no código. Podem me ajudar?