Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis.

Dieses Thema Erste Schritte - Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. im Forum "Allgemeine Java-Themen" wurde erstellt von J-Gallus, 30. Dez. 2016.

Thema: Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Moin Moin, Ich studiere zurzeit Informatik im ersten Semester und will über Weinachten ein wenig nach arbeiten. Die...

  1. Moin Moin,
    Ich studiere zurzeit Informatik im ersten Semester und will über Weinachten ein wenig nach arbeiten. Die tue ich mit dem Buch"Grundkurs Programmieren in Java ". Eine der Übungsaufgabe war es eine kleine Rechenaufgabe, eigentlich nur so abzutippen, dass sie auf das richtige Ergebnis kommt.
    Das Ergebnis sollte 8779 sein.
    Hier mein Code: (Wie gesagt, es ist eigentlich alles vorgegeben und auch richtig abgetippt.)
    Code:
    package Buch;

    import acm.program.ConsoleProgram;

    public class Aufgabe4_14_Double_berechnen extends ConsoleProgram {
    public void run(){

    double x1=Math.pow(10,20);
    double x2=1223;
    double x3=Math.pow(10,18);
    double x4=Math.pow(10,15);
    double x5=3;
    double x6=Math.pow(-10,12);
    double y1=Math.pow(10,20);
    double y2=2;
    double y3=Math.pow(-10,22);
    double y4=Math.pow(10,13);
    double y5=2111;
    double y6=Math.pow(10, 16);


    println(""+(x1*y1+x2*y2+x3*y3+x4*y4+x5*y5+x6*y6));
    }
    }

    Mein Ergebnis ist allerdings 2.000000000002E40.
    Ich programmiere in Eclipse und nutze die acm libary.
    Das is meiner erster Post bei euch. Sollte ich also irgendetwas falsch gemach haben, bitte ich höflichst um verbesserung.
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Bitte poste deinen Code das nächste mal so: [code=java]//JAVA CODE HERE [/code]

    Diese Aufgabe dient dazu, sich klar zu machen, wie groß der Wertebereich der einzelnen Datentypen ist. Die Genauigkeit von double scheint hier das Problem zu sein.
    Ansonsten kann ich dir nur "richtig" weiterhelfen, wenn du die Aufgabenstellung zur Verfügung stellst.
     
  4. Außerdem: kann es vielleicht sein, dass du z.b. bei x6 nicht (-10)^12 sondern 10^(-12) rechnen willst? Ersteres macht nicht wirklich Sinn, bzw. das Minus könnte man auch weglassen.
     
  5. Danke für eure Antworten. Die Aaufgabenstellung isst eigentlich genau das, was ich dort oben stehen habe.
    "Berechnen sie den Wert x1y1+x2y2+x3y3+x4y4+x5y5+x6y6
    für x1=10^20, x2=1223, x3=10^18, x4=10^15, x5=3, x6=-10^12
    y1=10^20 y2=2, y3=-10^22, y4=10^13, y5=2111,y6=10^16
    Das richtige Ergebnis ist übrigens 8779"
    So steht es Wort für wort in meinem Buch. Gibts euch eigentlich auch als app? Damit ich solche Ziffernlastigen Aufgaben das nächste Mal schneller/einfacher mit euch teilen kann?
     
  6. verzeiht mir meine Rechtschreibfehler. Bin auf dem Sprung bei meiner Familie und habe immer nur ein paar Minuten Zeit mich mit meinen Aufgaben zu beschäftigen..
     
  7. Bei der Schreibweise -10^12 wird zuerst die Potenz ausgerechnet. D.h. du musst auch Differenzen berechnen. (Sonst ist es klar, dass ein sehr großes Ergebnis rauskommt.)
     
  8. Entschuldige mich wenn ich auf dem Schlauch stehen sollte, aber was genau meinst du mit differnezen berechenen?
     
  9. Du rechnest Math.pow(-10,12);, das ist äquivalent zu (-10)^12 = 1.000.000.000.000, also eine positive Zahl.
    allerdings ist -10^12 = -1.000.000.000.000. Eine negative Zahl. wenn du nun zum Beispiel x3y3 rechnest, sollte das Ergebnis negativ sein. und wenn du hierzu etwas addierst, ist dies eine Differenz.

    Jedenfalls, könntest du dir auch Papier und Stift nehmen, und schauen, wie du Ausklammern und vereinfachen kannst und diese vereinfachte Form in Java programmieren, dann hast zwar du den größten Aufwand selbst gehabt, aber meiner Meinung nach trotzdem die Aufgabe gelöst.
     
  10. Ich scheitere gerade etwas daran ihm mit der Math. Methode zu sagen dass die Zahl wirklich negativ sein soll.. wenn ich (-1)*(Math.pow(-10,12)) nehme kommt letztendlich als Egebnis 0,0 raus.
     
  11. Mit einer gewissen Rechenungenauigkeit ist 0 auch das richtige Ergebnis. Du hast Summanden in der Größenordnung 10^40 (x1*y1=10^20*10^20=10^40). Was sind da schon 8000? Schau mal was passiert, wenn du das 2. und 5. Paar ans Ende der Rechnung setzt, also: x1y1+x3y3+x4y4+x6y6+x2y2+x5y5. Ich kann es gerade nicht testen, aber da sollte das richtige Ergebnis rauskommen. In der Mathematik gilt das Assoziativgesetz, in der Informatik nicht immer ;).
    x=Math.pow(10,20) bzw. y=-Math.pow(10,20) kannst (solltest) du übrigens auch so schreiben: x=1e20 bzw. y=-1e20.
     
  12. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!