Comment correctement et correctement comparer les flotteurs?

Chaque fois que je commence un nouveau projet et j'ai besoin de comparer certains type float ou double variables-je écrire le code comme celui-ci:

if (fabs(prev.min[i] - cur->min[i]) < 0.000001 &&
    fabs(prev.max[i] - cur->max[i]) < 0.000001) {
        continue;
}

Puis je veux me débarrasser de ces magie variables 0.000001(et 0.00000000001 pour le double) et fab, j'ai donc écrire une fonction en ligne et certains définit:

#define FLOAT_TOL 0.000001

Donc je me demande si il n'y a aucune méthode de faire cela? Peut-être certains d'en-tête standard de fichier?
Il serait également agréable d'avoir float et double limites(valeurs min et max)

  • Regardez cette stackoverflow.com/questions/17333/...
  • Dépend du cas d'utilisation, mais ce que sur de très petits nombres? Votre code de comparer 1e-10 et 1e-15 et -1e-10 comme tous égaux. Il n'y a pas une seule "bonne" façon de comparer des nombres à virgule flottante "proximité".
  • Pourquoi les #define? Vous pouvez simplement utiliser un static const float pour ce but.
  • Je parie que vous avez oublié de le comparer avec 0? 🙂
InformationsquelleAutor Dmitriy | 2010-12-28