Ich vergleiche gerade Floats in Java und die einfachste Formel lautet:
Math.abs(a - b) < THRESHOLD
Wenn Sie Ihre Variable nach der Differenzschwelle benennen, sollten Sie sie Delta oder Epsilon nennen ? Welcher der beiden Begriffe ist der richtige für den kleinsten Wert, den eine Gleitkommazahl darstellen kann?
Ist der Begriff Programmiersprache spezifisch oder ist er sprachübergreifend universell?
Antworten:
Epsilon in Mathematik und Ingenieurwesen
In Mathematik und Ingenieurwissenschaften im Allgemeinen:
und epsilon scheint in Ihrem Fall angemessener zu sein.
Epsilon in der Informatik
Insbesondere in der Informatik bezieht sich der Begriff Epsilon auch auf Maschinen-Espilon, das den Unterschied zwischen
1.0f
und dem kleinsten Schwimmer misst, der streng größer als ist1.0f
. Diese letztere Zahl gilt1.00000011920928955078125f
für Floats in Java und kann berechnet werden mit:Die Definition von Maschinen-Epsilon stimmt mit der oben beschriebenen allgemeinen Verwendung von Epsilon überein.
Floats vergleichen
Beachten Sie jedoch, dass Sie vor dem Vergleich von Floats auf "Nähe" eine Vorstellung von deren Größe haben müssen. Zwei sehr große und angeblich sehr unterschiedliche Schwimmer können gleich sein:
Und umgekehrt kann es viele mögliche Float-Werte (und mehrere Größenordnungen) zwischen zwei kleinen Floats geben, die sich "nur" durch das Maschinen-Epsilon unterscheiden. Im folgenden Beispiel sind 10.000.000 Float-Werte zwischen
small
und verfügbarf
, aber ihr Unterschied liegt immer noch deutlich unter dem Maschinen-Epsilon:Der in der Antwort von GlenH7 verlinkte Artikel untersucht den Float-Vergleich weiter und schlägt verschiedene Lösungen vor, um diese Probleme zu lösen.
quelle
In der Mathematik wird Delta verwendet, um einen Unterschied zu einem Wert darzustellen, epsilon wird verwendet, um einen beliebigen Fehlerwert darzustellen. In diesem Fall wäre epsilon der herkömmliche Name.
quelle
Um Ihre Frage direkt zu beantworten, möchten Sie den Begriff verwenden
epsilon
. Genauer gesagt, es istmachine epsilon
aber die allgemeine Verwendung lässt "Maschine" fallen und verwendet nurepsilon
.Wenn ich in meine lokale Kopie von schaue,
float.h
sehe ich: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:
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.
quelle
simplest formula
zum Vergleich relevant . Viele verwenden diesen Ansatz als ersten Versuch, und ich habe Dawsons Artikel aufgenommen, weil er wirklich in die Nuancen geht, wie schwierig der Vergleich ist. Also habe ich versucht, die Frage direkt zu beantworten und dann darauf hinzuweisen, warum ich sie nicht so verwenden soll.Dies ist eine Fehlerfunktion. absoluter Fehler wird in der Regel genannt ε (Epsilon) oder Δ x für einige Menge x:
Relativer Fehler wird manchmal als η (eta) bezeichnet:
Für Programmierzwecke
absoluteError
undrelativeError
(oder einige Abkürzungen davon) sind beschreibender. Wenn Sie behaupten möchten, dass der Fehler kleiner als ein bestimmter Wert ist, wird dieser Wert einfach als Schwellenwert oder Toleranz bezeichnet .Sehen:
Absoluter Fehler bei Wolfram MathWorld
Approximationsfehler bei Wikipedia
quelle
Ich würde es "Toleranz" nennen.
Vielleicht ist das nicht der mathematisch korrekte Begriff, aber die bloße Tatsache, dass Sie die Frage stellen, impliziert für mich, dass weder "Delta" noch "Epsilon" ein guter Variablenname wäre.
Nach meiner Erfahrung ist es besser, Bezeichnernamen zu verwenden, die für diejenigen sinnvoll sind, die den Code tatsächlich lesen. Was nützt ein vollkommen korrekter Name, wenn der Leser ihn bei Wikipedia nachschlagen muss, um zu verstehen, was er bedeutet?
quelle