Hallo zusammen.
Ich habe ein kleines Problem bei der Subtraktion von double Werten.
Ich habe jeweils 2 double Werte (welche ich von einer API bekomme) und möchte deren Differenz berechnen, das mache ich so:
Als Ausgabe erhalte ich dann z.B. das:
Ich habe hier mal die vermeintlich falsch berechneten Werte markiert.
Mir ist schon klar dass die Ungenauigkeit der anderen Werte mit der internen Darstellung von Dezimalzahlen zu tun haben, das ist auch nicht das Problem da ich nur eine Genauigkeit von 5 Nachkommastellen benötige und entsprechend runden kann.
Aber was ist z.B. mit der letzten Zeile im Beispiel?
1.2265 - 1.22602 sollte 0,00048 ergeben, stattdessen erhalte ich 4.799999999998139E-4 also etwa das 10000-fache. (dieser Faktor scheint immer der selbe zu sein)
Wie gesagt dass Runden bzw abschneiden der überschüssigen Nachkommastellen ist nicht das Problem.
Aber woher diese krassen und sporadisch auftretenden Ungenauigkeiten?
Wie muss ich hier Verfahren um ein korrektes Ergebniss zu erhalten?
Ich habe ein kleines Problem bei der Subtraktion von double Werten.
Ich habe jeweils 2 double Werte (welche ich von einer API bekomme) und möchte deren Differenz berechnen, das mache ich so:
Java:
for(int i = 0; i < Num; i++)
{
double a = API.getA(i); // Pseudo-API-Call zwecks vereinfachtem Beispiel
double b = API.getB(i); // "..."
double diff = Math.abs(a - b);
System.out.print(a + " - " + b + " = " + diff);
}
Als Ausgabe erhalte ich dann z.B. das:
Code:
1.23022 - 1.22653 = 0.003690000000000193
1.2288 - 1.2302 = 0.0014000000000000679
1.22839 - 1.22879 = 3.9999999999995595E-4 // FALSCH
1.22332 - 1.22838 = 0.0050600000000000644
1.2287 - 1.22332 = 0.00537999999999994
1.22951 - 1.2287 = 8.100000000001994E-4 // FALSCH
1.22816 - 1.2295 = 0.0013400000000001189
1.22817 - 1.22816 = 1.0000000000065512E-5 // FALSCH
1.22375 - 1.22817 = 0.0044200000000000905
1.22601 - 1.22377 = 0.0022400000000000198
1.2265 - 1.22602 = 4.799999999998139E-4 // FALSCH
Ich habe hier mal die vermeintlich falsch berechneten Werte markiert.
Mir ist schon klar dass die Ungenauigkeit der anderen Werte mit der internen Darstellung von Dezimalzahlen zu tun haben, das ist auch nicht das Problem da ich nur eine Genauigkeit von 5 Nachkommastellen benötige und entsprechend runden kann.
Aber was ist z.B. mit der letzten Zeile im Beispiel?
1.2265 - 1.22602 sollte 0,00048 ergeben, stattdessen erhalte ich 4.799999999998139E-4 also etwa das 10000-fache. (dieser Faktor scheint immer der selbe zu sein)
Wie gesagt dass Runden bzw abschneiden der überschüssigen Nachkommastellen ist nicht das Problem.
Aber woher diese krassen und sporadisch auftretenden Ungenauigkeiten?
Wie muss ich hier Verfahren um ein korrektes Ergebniss zu erhalten?