Float Zahl ungenau



  • Moin,

    bin noch recht neu in Winapi und hab zu Übungszwecken mir eine kleine Dialoganwendung zur Zinseszinsrechnung geschrieben. Als ich nun die Rechenergebnisse mit den Rechenergebnissen von Webseiten verglich, fiel mir auf das mein Ergebniss minimal abwich. Ich hab dann mal das Ganze mit meiner Formel von Hand (also mit Taschenrechner) nachgerechnet und bin auf die Ergebnisse der Webseiten gekommen. Dann hab ich mal meine Anwendung debuggt und dabei festgestellt, dass wenn ich z.B. den Zinssatz (3%) 3/100 = 0.02999999999 umrechnen schon mal dieser kleine Fehler auftrat. Ist schon klar die Stellen bei der Berechnung sind endlich, da treten Rundungsfehler auf. Aber was was machen die Webseits anderst oder z.B. der in Windows eingebaute Rechner?

    Wer weiss wie es geht und verrät es mir?

    :xmas1:



  • Steffen87 schrieb:

    Aber was was machen die Webseits anderst oder z.B. der in Windows eingebaute Rechner?

    Wenn man mit Währungen rechnet, darf man wegen der Rundungsproblematik keine Fließkommazahlen benutzen. Entweder man benutzt dann BCD-Zahlen, dafür gibt es in C/C++ keinen eingebauten Datentyp, Du müsstest Dir also selbst eine Klasse dafür schreiben, oder aber man rechnet mit ganzen Zahlen (int, int64, long long, oder wie sie alle heißen), und berücksichtigt das Komma nur bei der Ausgabe.
    Also statt mit zB 1,25€ rechnest Du mit 125 Cent.



  • Die Verwendung von double statt float dürfte die Genauigkeit auch schon ziemlich erhöhen.


  • Mod



  • Guter Artikel! Doch leider begegnen wir immer wieder solch abstrusen Meinungen, Fliesskommazahlen seien ungenau.



  • berniebutt schrieb:

    Guter Artikel! Doch leider begegnen wir immer wieder solch abstrusen Meinungen, Fliesskommazahlen seien ungenau.

    Ja, Du hast das doch schon in einem anderen langen Thread, in dem das ausführlich diskutiert wurde, nicht verstanden.


  • Mod

    float und double sind exakt so genau wie es ihr Datentyp zulässt.

    Das eigentliche Problem ist nur die Darstellung von dezimalen Zahlen in diesem auf binärem System aufbauenden Typen.



  • Danke für die Hinweise. Das mit float und double war mir vorher nicht bekannt. Auch die anderen Hinweise waren hilfreich. Ich habe das Problem nun lösen können.

    :xmas1:


Anmelden zum Antworten