Überwindung von Genauigkeitsproblemen bei Gleitkommazahlen
Gleitkommazahlen, ein in der Informatik weit verbreiteter Datentyp, stellen potenzielle Genauigkeitsprobleme dar zu ihrer intrinsischen Darstellung in der Maschine. Um dieses Problem zu veranschaulichen:
#include <stdio.h> #include <stdlib.h> int main() { char *str = "4.600"; double mw = atof(str); float p = 0.2; float g = 0.2; int h = 1; int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1; printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g)); printf("Columns: %d\n", columns); return 0; }
In diesem Code ist str eine String-Darstellung von „4.600“, und der Aufruf von atof(str) wandelt sie in ein doppeltes MW um. Die nachfolgenden Berechnungen ergeben ein unglückliches Ergebnis: Die Gleitkommadarstellung von 4,5999999999999996 kann den gewünschten Wert von 4,600 nicht genau darstellen.
Lösung des Problems
Wie in der Lösung hervorgehoben ist es praktisch unmöglich, mit der Gleitkomma-Arithmetik eine exakte Gleichheit zu erreichen. Stattdessen ist es vorzuziehen, Werte innerhalb eines akzeptablen Bereichs zu vergleichen. In bestimmten Szenarien ist es wichtig zu erkennen, dass bestimmte Werte nicht genau als Gleitkommazahlen dargestellt werden können.
Empfohlene Ressourcen
Weitere Einblicke finden Sie in den folgenden Referenzen:
Das obige ist der detaillierte Inhalt vonWie können wir Genauigkeitsprobleme in der Gleitkomma-Arithmetik überwinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!