[Java] Rechenfehler ?!

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von lito, 2. Juni 2009 .

Schlagworte:
  1. 2. Juni 2009
    Rechenfehler ?!

    Hi
    bin gerade was mit java am rumspielen und bin auf nen seltsamen Fehler gestoßen den ich hier mal einfach geschrieben habe.
    double x;
    x=Math.pow(10,(-1));
    System.out.println(x);
    x=x*112;
    System.out.println(x);
    diese einfache rechnung wo 11.2 rauskommen sollte gibt mir 11,2000000001
    weis einer was da passiert und wie man den Fehler beheben kann?
     
  2. 2. Juni 2009
    AW: Rechenfehler ?!

    Bin zwar kein Java experte, aber für mich sieht es so aus, dasses dadurch kommt, da du deine Variable x als Double definiert hast, und deshalb die Lange zahl rauskommt.
     
  3. 2. Juni 2009
    AW: Rechenfehler ?!

    Das wird ein Rundungsfehler auf Bit-Ebene sein, kommt leider immer wieder vor, da auch für solche Berechnungen immer nur begrenzter Speicher zur Verfügung steht (ein double hat ja auch "nur" 32 Bit). Könntest das Ergebnis einfach abschneiden, indem du angibst, dass nur eine Nachkommastelle angegeben werden soll.
     
  4. 2. Juni 2009
    AW: Rechenfehler ?!

    ja, das sind interne rundungsfehler, deren gibts zuhauf in java, sollte man auch aufpassen, zb ist der sinus von pi (der 0 sein sollte) in java eben nicht 0 sondern 1.2246*10^(-16). zwar eine sehr kleine zahl, aber eben nicht null
     
  5. 2. Juni 2009
    AW: Rechenfehler ?!

    vorredner haben das schon gut hingestellt, löse das problem mit integer

    Code:
    int x;
    x=(int)Math.pow(10,(-1));
    System.out.println(x);
    x=x*112;
    System.out.println(x);
     
  6. 8. Juni 2009
    AW: Rechenfehler ?!

    Wie schon gesagt Rundungsfehler!

    Allerdings würde ich anstatt int zu benutzen mir eine round funktion erstellen die die zahl auf x nachkommastellen rundet.

    Sorry GmbH aber das funktioniert leider nicht!
    Integer hat als Wertebereich nur ganze zahlen. wenn du also 10^(-1) auf int castest kommt da 0 raus und 0 * 112 ergibt 0
     
  7. 8. Juni 2009
    AW: Rechenfehler ?!

    Lugges ansatz ist auch der Programmiertechnisch richtige Weg.

    Man schneidet fast immer bei Mathematischen rechnungen im Computer die letzten Zahlen weg.
    Bzw. man bemüht sich bei einer Rechnung möglichst, dass sich Rundungsfehler gegenseitig aufheben.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.