Musterlösung Verständnis Frage zu Math.abs()

jaykop

Mitglied
Hallo,

habe hier folgende Aufgabenstellung (siehe Bild Anhang). Mit der Folgenden Musterlösung.
Was ich hier nicht verstehe ist wieso Math.abs angewendet wird. Mir ist aber klar das Math.abs für die Erzeugung des Betrags genutzt wird. Jedoch verstehe ich nicht wieso man die negativen Zahlen ins Positive umwandeln muss um die Toleranz zu kontrollieren. Wenn die Berechnung eine negative Zahl Berechnet ist die Zahl doch schon zu weit von der Toleranz entfernt ? oder vertue ich mich da. Zudem hatte ich die Frage anfangs anders Versandten. Ich habe die Toleranz zu PI kontrollieren lassen und nicht zu PI/4.0. Versteht einer die Aufgabe auch so oder liegt es jetzt an meinem Verständnis der Textaufgabe.

Java:
   public static double piApproximation(double epsilon) {
		double result = 0.0;
		
		double i = 0;
		double minusEins = -1;
		
                // Warum hier Math.abs ???
		while ( Math.abs(result-(Math.PI/4.0)) > epsilon ) {
                        
			minusEins = -minusEins;
			result += minusEins * 1.0/(2.0*i + 1.0);
			System.out.println(result);
			i++;
		}
		
		return result*4.0;
	}
 

Anhänge

  • Bildschirmfoto 2012-09-10 um 12.22.54.jpg
    Bildschirmfoto 2012-09-10 um 12.22.54.jpg
    36,5 KB · Aufrufe: 60
In der Aufgabe steht, die Reihe konvergiert gegen PI/4, also macht es Sinn mit diesem Wert zu vergleichen. Mathematisch macht es keinen Unterschied, beim nutzten von Floting-Points wäre aber tatsächlich der Vergleich von 4*result und PI genauer, der Unterschied wird sich allerdings erst in den letzten beiden Stellen bemerkbar machen (wenn überhaupt), ist also nicht notwendig.
Zu Math.abs(): Das wird verwendet, weil der berechnete Wert für sowohl um epsilon über als auch unter PI liegen darf, ohne dürfte der Wert nur um epsilon größer sein als PI, aber nicht kleiner.
 
Danke für die Antwort.
Also werden somit die Werte unter PI/4 = 0.7853... und über diesen werten Berücksichtig.
Was ich noch nicht verstanden habe ist. Wieso man Math.abs() besonders bei Fließkommazahl anwenden soll wenn man nach einem Wert im Toleranzbereich sucht. Weis einer ne Vernünftige Erklärung dazu ?
 
Beim weiteren testen ist mir jetzt aufgefallen das beim Rückgabewert

return result*4.0;

der Wert beim zurückgeben nicht mir 4.0 Multipliziert wird. Da stelle ich mir die Frage wieso man es dennoch so hingeschrieben hat. Weiss einer ne Antwort dazu ?
 
Die Antwort zu der Frage mit return result*4.0; habe ich eben selber herausgefunden.
Es macht einen großren unterschied ob man die Methode nur als

Java:
piApproximation(0.08);

aufruft oder dies mit System.out.println(); aufruft.

Java:
System.out.println("piApproximation(0.08); " + piApproximation(0.08));

Bei der ersten Variante bekomme ich nur die System.out.println(); Werte aus der while Schleife in der Methode zu Gesicht und bei der zweiten zusätzlich auch den tatsächlichen Rückgabewert der Methode.
 

Zurück
Oben