Schleifen und Nachkommastellen

Studi86

Neues Mitglied
Morgen,

Ich hab hier eine Aufgabe, bei der ich die arcsinh(x) Funktion, mithilfe der Potenzreihe, programmieren soll. Die Schleife soll solange durchlaufen werden, bis die Ergebnisse sich auf zehn Nachkommastellen nicht mehr unterscheiden können. Das wollte ich mit einer while-Schleife tun. Diese wird aber nur zweimal durchlaufen und auch nur die ersten zwei Nachkommastellen sind richtig. Die for Schleife mit zehn Durchläufen liefert das korrekte Ergebnis. Hier mal das bisherige Programm (Ist noch nicht fertig, ich will erst die while Schleife zum laufen bringen). eps soll durch die main übergeben werden, laut Aufgabenstellung:

Java:
public class MyArcSinh {


	public static void main (String[] args) {
		double x = 0.8;
		final double eps = 1e-10;
						
		MyArcSinh sh = new MyArcSinh();
		sh.arcSinh(x, eps);
		
		
	}

	public static double arcSinh(double x, double eps) {
		double produkt = x;
		double result = x;
		double resultAlt = 1;                                                             // willkürlich mit einer Zahl initialisiert
		double zaehler = 1;
		double nenner = 1;
		int n = 1;
			
		if (-1<x && x<1) {

				while(resultAlt-result > eps) {
					resultAlt=result;
					zaehler*=n;
					n+=2;
					nenner*=n*(n-1.)/(n-2.);
					produkt*=-x*x;
					result+=(zaehler/nenner)*(produkt);
					System.out.println("Arcsinh(x) = " + result);
					
					
					
				}	
						
		}

		else {
			System.out.println("Fehler, Wert muss zwischen -1 und 1 liegen");
		}
		
		return result;
	}
		
		
}
 

KonradN

Super-Moderator
Mitarbeiter
Die Differenz kann aber doch auch negativ sein. Und damit hast Du dann natürlich, dass -0,irgendwas kleiner als dein relativ kleines eps ist.

Du musst bei der Differenz also immer den absoluten Wert nehmen.

Und als Tipp: Bei sowas einfach auch immer diese Werte anzeigen. Du prüfst ja resultAlt - result und das kannst Du am Ende der Schleife doch einfach ausgeben. Dann solltest Du das mit dem negativen Delta sehen (vermute ich mal - so ich mich nicht geirrt habe)
 

Neue Themen


Oben