C++ Double Ungenauigkeit beheben?

5 Antworten

Es gibt zwei Lösungsmöglichkeiten:

a) du rechnest mit Ganzzahlvariablen. Die 10.45 wird dann als 1045, also tausend-fünfundvierzig gespeichert. Alle Ein- und Ausgaben müssen umrechnen.

b) jeder Abprüfung auf Gleichheit oder größer / kleiner werden mit einem Epsilonwert, beispielsweise 0,001 gemacht. Statt if ( a == 10.45 ) musst du durch if ( isEqual( a, 10.45 ) ) ersetzen und dir eine Funktion isEqual() schreiben mit deinem Epsilonwert.

Hast du durch den Rundungsfehler im weiteren Programm Rechenfehler? Falls nicht, dann kannst du den kleinen Fehler ignorieren, der fällt in der Regel kaum ins Gewicht und rundet sich auch gerne wieder raus. Ansonsten ist Double vielleicht nicht der richtige Datentyp für dich und du müsstest auf eine Bibliothek umsteigen. Die C++-Experten kennen sich vielleicht noch besser aus, aber ich habe mal gehört, dass MPFR ( https://en.wikipedia.org/wiki/GNU_MPFR ) ziemlich geläufig ist.

Du kannst 10.45 nicht als Double darstellen. Das ist unmöglich.

Runde einfach bei der Ausgabe, oder nutze Fixpunkt.

Die Zahl wird in eine Binärzahl umgewandelt, die nicht immer exakt der Dezimalzahl entspricht.

benjamen34 
Fragesteller
 25.12.2019, 14:56

Das ist mir wie bereits gesagt bewusst bei meiner Frage geht es lediglich um die Lösung des Problems

0
bert00712  25.12.2019, 14:57
@benjamen34

Damit musst du dann leben, indem du die Rechnungen so aufführst, dass der Fehler unbedeutend wird.

0