Fehlerhafte Nachkommastelle



  • Hallo,

    ich schreibe ein Programm mit MFC.
    Ich habe u.a. Editfelder die Zahlen aufnehmen sollen (float) und wenn ich die Felder einlese kommen da mitunter bei eingaben wie "0,35" in den Variablen im Programm "0,34999999" an.
    Woran kann das liegen?
    Ebenso wenn ich dividiere:

    float f,x=50;
    f=x/100;
    

    Ausgabe: f=0,5000001
    z.T ist x auch ein int. dann mach ich das so:

    float f;
    int x=50;
    f=static_cast<float>(x)/100;
    

    Ausgabe: f=0,5000001

    Wo ist denn das Problem? wieso kommt nicht 0,5 raus wie es sollte?

    Danke für Hilfe
    Micha



  • Naja das sind eben Rundungsfehler die sich in der Digitaltechnik nicht vermeiden lassen. Warum das so ist kann man eigentlich überall nachlesen

    Durch die unterschiedliche binäre Darstellung der Zahlen kann es in beiden Systemen zu Artefakten kommen. Das heißt: Zahlen, die im Dezimalsystem „rund“ erscheinen, zum Beispiel 12,45, können im Binärsystem nicht exakt dargestellt werden. Statt dessen wird ihre Binärdarstellung abgeschnitten, so dass man bei der Rückumwandlung ins Dezimalsystem den Wert 12,44999999900468785 erhält. Dieses kann in nachfolgenden Berechnungen zu unvorhergesehenen Ab- oder Aufrundungsfehlern führen.


Log in to reply