java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 10.09.2012, 11:39   #1 (permalink)
Benutzer
int
 
Registriert seit: 15.08.2011
Fachbeiträge: 42
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
Standard Musterlösung Verständnis Frage zu Math.abs()

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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
   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;
    }
Miniaturansicht angehängter Grafiken
Musterlösung Verständnis Frage zu Math.abs()-bildschirmfoto-2012-09-10-um-12.22.54.jpg  
jaykop ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 11:59   #2 (permalink)
Stammbenutzer
Halbes Megabyte
 
Registriert seit: 17.11.2010
Fachbeiträge: 608
Abgegebene Danke: 4
Erhielt 137 Danke für 135 Beiträge
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.
Kevin94 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
jaykop (10.09.2012)
Alt 10.09.2012, 18:28   #3 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 15.08.2011
Fachbeiträge: 42
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
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 ?
jaykop ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 19:50   #4 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 15.08.2011
Fachbeiträge: 42
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
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 ?
jaykop ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 20:27   #5 (permalink)
Stammbenutzer
Viertel Megabyte
 
Registriert seit: 22.06.2011
Fachbeiträge: 292
Abgegebene Danke: 33
Erhielt 87 Danke für 86 Beiträge
Abschnitt A: Typische Fehler im Umgang mit Gleitkommazahlen, seltsame und scheinbar falsche Ergebnisse

Frage A.2: Obwohl zwei Zahlen gleich sein müssten, sind sie es nicht. Wie vergleiche ich Gleitkommazahlen richtig?

=> Ungenauigkeit von double und float: Gleitkommazahlen und Alternativen

Deinen letzen Beitrag versteh ich nicht, result*4.0 mutipliziert tatsächlich result mit 4
JCODA ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Danke sagt:
jaykop (11.09.2012)
Alt 11.09.2012, 09:34   #6 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 15.08.2011
Fachbeiträge: 42
Abgegebene Danke: 20
Erhielt 0 Danke für 0 Beiträge
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 Code: Quelltext in neuem Fenster öffnen
1
piApproximation(0.08);

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

Java Code: Quelltext in neuem Fenster öffnen
1
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.
jaykop ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu einem Einstiegsgehalt für einen Wirtschaftsinformatiker DennisXX Plauderecke 25 31.08.2011 19:25
SQL Inner Join - On Klausel kossy Datenbankprogrammierung 10 03.08.2011 13:36
frage zu vererbung (super) Java Basics - Anfänger-Themen 10 06.07.2009 17:44
Frage zu Memory Leak, Garbage Collection und Profiler-Tools -frank Allgemeine Java-Themen 6 18.10.2007 16:56


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de