Hallo Leute!
Ich habe ein Problem und zwar soll ich ein Programm schreiben, dass den Sinus(x) im Bogenmaß ausrechnet. Gegeben ist diese Formel zur Errechnung:
Ganz wichtig: Das ganze soll über Rekursion gelöst werden und abgebrochen wird die Methode, falls der Summand in der Klammer zwischen −1 ∗ 10^(−7) und 1 ∗ 10^(−7) liegt.
Meine (noch) falsche Lösung:
Viel Code um nichts! Die ersten drei Methoden sind ganz einfach Termlöser und die 4. Methode ist für das Abbruchkriterium zuständig.
Das Problem: die methode loeseRekursiv(x) bricht nach dem zweiten Durchlauf ab und returned das Ergebnis, obwohl das Abbruchkriterium gar nicht erfüllt ist. Ich kann ums Verrecken den Fehler nicht finden. Findet ihr den Fehler und könnt mir helfen?
Vielen Dank im Voraus!
Ich habe ein Problem und zwar soll ich ein Programm schreiben, dass den Sinus(x) im Bogenmaß ausrechnet. Gegeben ist diese Formel zur Errechnung:
Ganz wichtig: Das ganze soll über Rekursion gelöst werden und abgebrochen wird die Methode, falls der Summand in der Klammer zwischen −1 ∗ 10^(−7) und 1 ∗ 10^(−7) liegt.
Meine (noch) falsche Lösung:
Java:
public class MathFormel {
public static int i=0;
public static double ergebnis = 0.0;
//Fakultät
public static double factorial(int fact){
if(fact == 1){
return 1.0;
}
else{
return fact * (factorial(fact-1));
}
}
//Term (-1)^i
public static int termloeser1(int i){
if((i % 2)==0){
return 1;
}else{
return -1;
}
}
//Term x^(2i+1)
public static double termloeser2(double x, int i){
double hilfe1 = x;
for(int counter1 = 1; counter1 < ((2*i)+1); counter1++){
x*=hilfe1;
}
return x;
}
public static boolean abbruchchecker(double x, int i){
double abbruchraum = 0.0000001;
double checkzahl = termloeser1(i) * ((termloeser2(x,i))/(factorial((2*i)+1)));
if(checkzahl < abbruchraum && ((checkzahl * (-1)) > abbruchraum)){
return false;
}else{
return true;
}
}
public static double loeseRekursiv ( double x ) {
ergebnis = termloeser1(i) * ((termloeser2(x,i))/(factorial((2*i)+1)));
if(abbruchchecker(x,i)==false){
return ergebnis;
}else{
i++;
return ergebnis + loeseRekursiv(x);
}
}
Das Problem: die methode loeseRekursiv(x) bricht nach dem zweiten Durchlauf ab und returned das Ergebnis, obwohl das Abbruchkriterium gar nicht erfüllt ist. Ich kann ums Verrecken den Fehler nicht finden. Findet ihr den Fehler und könnt mir helfen?
Vielen Dank im Voraus!