Um Ihre Frage direkt zu beantworten, möchten Sie den Begriff verwenden epsilon
. Genauer gesagt, es ist machine epsilon
aber die allgemeine Verwendung lässt "Maschine" fallen und verwendet nur epsilon
.
Wenn ich in meine lokale Kopie von schaue, float.h
sehe ich:
#define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define LDBL_EPSILON DBL_EPSILON /* smallest such that 1.0+LDBL_EPSILON != 1.0 */
Und die damit verbundenen Kommentare machen deutlich, dass epsilon der Begriff ist, auf den Sie sich beziehen.
Wir können uns aber auch auf andere externe Referenzen verlassen, um zu überprüfen, ob dies epsilon
der richtige Begriff ist. Sehen Sie hier , hier , hier und schließlich diese Kombination von SO-Abfrage-Tags . Ich konnte keinen direkten Verweis auf den IEEE 754-Standard finden, um ihn zu zitieren.
Sie haben nicht gefragt, aber ich fand diese Referenz sehr relevant für das Beispiel, das Sie zur Klärung Ihrer Frage angegeben haben.
Schauen Sie sich diesen Blog-Artikel von Bruce Dawson von Valve zum Vergleich von Gleitkommawerten an, um zu erfahren, warum Sie den von Ihnen vorgeschlagenen Vergleich nicht verwenden möchten.
In diesem Artikel sind einige Informationen enthalten, aber dies ist der relevanteste Ausschnitt von dort:
Wenn der Vergleich von Floats auf Gleichheit eine schlechte Idee ist, können Sie dann überprüfen, ob ihre Differenz innerhalb einiger Fehlergrenzen oder des Epsilon-Werts liegt, wie folgt:
bool isEqual = fabs(f1 – f2) <= epsilon;
Mit dieser Berechnung können wir das Konzept ausdrücken, dass zwei Floats nahe genug sind, um sie als gleich zu betrachten. Aber welchen Wert sollten wir für epsilon verwenden?
Angesichts unserer obigen Experimente könnten wir versucht sein, den Fehler in unserer Summe zu verwenden, der ungefähr 1,19e-7f betrug. Tatsächlich gibt es in float.h sogar eine Definition mit genau diesem Wert, die FLT_EPSILON heißt.
Klar ist es das. Die Header-Datei Götter haben gesprochen und FLT_EPSILON ist das einzig wahre Epsilon!
Nur dass das Müll ist. Für Zahlen zwischen 1,0 und 2,0 repräsentiert FLT_EPSILON den Unterschied zwischen benachbarten Floats. Für Zahlen kleiner als 1,0 wird ein Epsilon von FLT_EPSILON schnell zu groß, und bei ausreichend kleinen Zahlen kann FLT_EPSILON größer sein als die Zahlen, die Sie vergleichen!
Dawson geht auf einige andere Überlegungen zu den Feinheiten ein, die beim Vergleich von Floats und beim Umgang mit sehr kleinen Werten wie diesen auftreten. Ich möchte Sie daher ermutigen, den Rest seines Beitrags zu lesen.