Python- falsches Ergebnis

Diskutiere das Thema Python- falsches Ergebnis im Forum Mac OS Entwickler, Programmierer.

  1. Themenautor

    Themenautor Thread Starter Mitglied

    Beiträge:
    649
    Zustimmungen:
    43
    Mitglied seit:
    15.09.2010
    Hallo,

    ich unternehme grad meine ersten Schritte bzgl. Python und habe gleich eine Frage:

    Wenn ich Folgendes eingebe, erhalte ich als Ergebnis 6.8999999999999995:

    4.6+2.3

    Warum ist das so?

    Der Themenautor
     
  2. Haskelltier

    Haskelltier unregistriert

    Beiträge:
    570
    Zustimmungen:
    1.329
    Mitglied seit:
    16.08.2017
    Das liegt daran, dass Gleitkommaarithmetik nicht immer korrekte Ergebnisse liefert, sondern diverse Fehlerquellen existieren, die zu Abweichungen führen können. In ganz ungünstigen Fällen können die Fehler auch sehr groß werden. Für eine kleine Übersicht kannst du dir beispielsweise mal im Wikipediaartikel https://de.wikipedia.org/wiki/Gleitkommazahl#Eigenschaften_einer_Gleitkommaarithmetik den Abschnitt „Eigenschaften einer Gleitkommaarithmetik“ anschauen.

    Daher ist das Ergebnis im engeren Sinne nicht falsch, nur berechnet die Gleitkommadivision etwas anderes als die Division, die aus der Mathematik bekannt ist.
     
  3. Hausbesetzer

    Hausbesetzer Mitglied

    Beiträge:
    10.631
    Zustimmungen:
    2.646
    Mitglied seit:
    10.09.2008
    Grundlegend rechnet der Computer hier richtig nur intern kann der Computer eine Zahl wie "4.6" nicht speichern*
    4.6 ist für ihn 01000000100100110011001100110011 und das ist laut IEEE-754 4.599999904632568359375 und nicht 4.6

    *kann er doch, macht man aber nur da, wo es wirklich notwendig ist. Python macht es hier nicht.
     
  4. Themenautor

    Themenautor Thread Starter Mitglied

    Beiträge:
    649
    Zustimmungen:
    43
    Mitglied seit:
    15.09.2010
    Ok, das verstehe ich soweit. Würde man solch eine (aus menschlicher Sicht) einfache Rechnung innerhalb von Python dann am sinnvollsten lösen, indem man z.B. auf eine Nachkommastelle rundet?

    Der Themenautor
     
  5. Hausbesetzer

    Hausbesetzer Mitglied

    Beiträge:
    10.631
    Zustimmungen:
    2.646
    Mitglied seit:
    10.09.2008
    Einfach rechnen und dann wirklich erst am Ende das Ergebnis runden
     
  6. Haskelltier

    Haskelltier unregistriert

    Beiträge:
    570
    Zustimmungen:
    1.329
    Mitglied seit:
    16.08.2017
    Oder man nutzt komplexere Zahltypen wie beispielsweise den Typ Ratio von Haskell (eine andere Programmiersprache). Dieser Datentyp repräsentiert Brüche wie sie aus der Schule bekannt sind (also Brüche mit Zähler und Nenner und wirklich beliebiger Größe, bzw. so viel wie der Speicher hergibt). Nur rechnet man damit dann um Größenordnungen langsamer, eignet sich also eher nicht, wenn es auf Performance und nicht so sehr auf die Exaktheit ankommt. Der Datentyp Scientific von Haskell ist da eine gute Mischform. Der Zahlbereich ist wesentlich größer als bei reinen Integern oder Doubles, auch Rechenfehler treten hier seltener und weniger gravierend auf und die Performance ist annehmbar.
     
  7. Kaito

    Kaito Mitglied

    Beiträge:
    6.456
    Zustimmungen:
    1.383
    Mitglied seit:
    31.12.2005
Die Seite wird geladen...

MacUser.de weiterempfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...