Vergleichen von zwei floats

#include <stdbool.h>

bool Equality(double a, double b, double epsilon)
{
  if (fabs(a-b) < epsilon) return true;
  return false;
}

Ich habe versucht, diese Methode zum vergleichen von zwei Doppel, aber ich bekomme immer Probleme, da ich nicht weiß, wie zu wählen, die epsilon, eigentlich will ich vergleichen, kleine zahlen (6 6 stellen nach dem Komma) wie 0.000001. Ich habe versucht, mit einigen zahlen, manchmal bekomme ich 0.000001 != 0.000001 und manchmal 0.000001 == 0.000002
Gibt es eine andere Methode anderes, als der Vergleich mit dem epsilon?

Meine Absicht ist es, zu vergleichen, zwei Doppelzimmer (die stellen die Zeit in meinem Fall). Die variable t stellt die Zeit in Millisekunden ist, eine doppelter. Es erhöht wird, durch eine andere Funktion 0.000001 dann 0.000002 etc. jede Zeit t ändert, ich will, um zu überprüfen, ob es gleich in eine andere variable vom Typ double tt bei tt == t, ich habe einige Anweisungen ausführen..

Vielen Dank für Ihre Hilfe

  • "Epsilon", nicht epselon. en.wikipedia.org/wiki/Epsilon
  • Weder 0.000001 noch 0.000002 haben eine genaue Vorstellung, wie floating-point, beide unendlich sind binäre Fraktionen mit periodischen Dezimalzahlen. Darüber hinaus fabs(a-b) ist anfällig für katastrophale Absage.
  • Wenn Sie nicht wissen, was das alles ist, können Sie vermeiden, zumindest das erste problem durch die Verwendung einer epsilon, die können genau dargestellt werden, wie schweben, wie 0.00000095367431640625, das ist 2^-20 und in der Nähe der 10^-6, die Sie wollen
  • Warum sind Sie mit float in den ersten Platz? Lieber double ohne eine sehr stark für andere floating-point-Typen. Natürlich Ihr Problem bleibt immer noch, ob es floats oder doubles.
  • Eigentlich war es ein Fehler. Ich bin mit Doppelzimmer. meine Absicht ist es, zu vergleichen, zwei Doppelzimmer (die stellen die Zeit in meinem Fall). Die variable t stellt die Zeit in Millisekunden ist, eine doppelter. Es erhöht wird, durch eine andere Funktion 0.000001 dann 0.000002 etc. jede Zeit t ändert, ich will, um zu überprüfen, ob es gleich in eine andere variable vom Typ double tt bei tt == t, ich habe einige Anweisungen ausführen..
  • Wählen epsilon können Sie sehen: Knuth, Donald E. (1998). Die Kunst der Computer-Programmierung. Volume 2: Seminumerical Algorithmen. Dritte Auflage. Abschnitt 4.2.2, S. 233. Reading, MA: Addison-Wesley. ISBN 0-201-89684-2. Für eine C-Implementierung finden Sie unter fcmp.sourceforge.net und insbesondere die README-Datei.
  • mögliche Duplikate von effektivste Weg für float-und double-Vergleich

InformationsquelleAutor kate | 2011-05-13
Schreibe einen Kommentar