Vergleichen von Float

Moin,

das man float (und double) nicht direkt mit == bzw. != vergleichen kann ist mir bewusst.

bool isEqual = fabs(f1 – f2) <= epsilon;

Aber das das Epsilon nur sinnvoll für 1.0 bis 2.0 ist, war mir nicht bewusst. Auch wenn es im Link um C/C++ von der Sprache her geht. Besteht die Herausforderung auch in Java (und allen anderen Sprachen).

hand, mogel

Dein Post ist etwas verwirrend. Du hast eine Formel gegeben, die generell angewendet wird. Und in dem Artikel, den Du verlinkt hast, wird ja die Frage betrachtet: Was soll denn als epsilon genommen werden.

Und da wird häufig eine spezielle Konstante genommen: FLT_EPSILON welches einen Wert hat von 1.19e-7.

Und das ist halt sehr problematisch: Für sehr kleine Werte ist der Wert zu groß, für große Werte ist er zu groß. Daher ist es halt wichtig, immer Werte zu nehmen, die Sinn machen.

Das wirst Du vielleicht auch gemeint haben und ich will Dir nicht widersprechen - ich wollte diese Aussage nur etwas erläutern.

1 Like

Dem Post von KonradN schließe ich mich an. Epsilon kann alles sein.

Man kann die Aussage aber noch weiter spinnen: Je mehr floating point Berechnungsschritte für ein Ergebnis notwendig waren, desto größer muss Epsilon sein.

1 Like