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 
Beitragsersteller
 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

benjamen34 
Beitragsersteller
 25.12.2019, 13:31

Das bringt nichts das manipuliert nur den Ausgabestrom. Das heißt er schneidet einfach den Rest weg aber das hilft mir ja nichts weil ich runden muss un damit weiterreichen muss...

0