Wie löse ich die Javaaufgabe für den goldenen Schnitt?
Hallo liebe Community,
ich habe folgendes Problem: Ich muss eine Javaaufgabe lösen, welche diesen mit konvergenz berechnet. Die vorgegeben Formel lautet wie folgt: g = 1 + 1/g = 1+1/1+1/g = ... Für g wird quasi immer 1+1/g eingesetzt. Mir wird ein Parameter übergeben, welcher bestimmt, wie oft die Abfolge berechnet werden soll. Bei meinem Programm kommt es aber immer wieder zu minimalsten Abweichungen bei der 3.-5. Nachkommastelle und ich weiß nicht wie ich diese Abweichungen beseitigen kann.
Hier noch der bisherige Code:
public class GoldenRatio {
public static double result;
public static double result2;
public static double calculate(int n) {
if(n==0){
return 0;
}
for(int i=0;i<=n;i++){
result = 1+ 1/result;
}
return result;
}
}
Ich hoffe ihr könnt mir da irgendwie weiterhelfen.
Viele Grüße Dubsepp
2 Antworten
Du solltest vorher result und result2 klären (ihnen einen Initialwert geben). Ich weiß nicht ob das in Java so ein großes Problem ist, weil ich nicht mit Java arbeite, aber in C und C++ wird beim initialisieren einer Variable immer nur Speicherplatz reserviert, was vorher an der Stelle stand, kann beliebig sein. Z.b. wenn result den Anfangswert 2.18648446 hat, verschwindet der Fehler ja mit größer werdendem n, aber er ist trotzdem da. Setze result auf 1 bevor du die Schleife anfängst und alles ist ok, alle weiteren Fehler sollten Fließkommafehler sein, weil du mit doubles arbeitest.
LG
Du hast "result" nicht initialisiert. Deshalb wird der Standardwert von "0" vergeben. Die Probleme, die die Division durch 0 mit sich bringt, sind dir vermutlich bekannt.
Ich würde dir empfehlen, es mittels Rekursion zu lösen:
public static double calculate(int n) {
if (n == 0)
return 1;
return 1f + 1f / calculate(n - 1);
}
Falls du die Lösung per Iteration bevorzugst, musst du "result" einfach nur mit "1" initialisieren und es sollte funktionieren.