Maison >développement back-end >C++ >Comment dois-je comparer les nombres à virgule flottante pour l'égalité et l'inégalité ?
Détermination de l'égalité des nombres à virgule flottante à l'aide de Double.Epsilon
La documentation MSDN suggère d'utiliser une valeur supérieure à la constante Double.Epsilon pour établir la marge de différence absolue acceptable pour déterminer si deux nombres à virgule flottante peuvent être considérés comme égaux. Cependant, cette recommandation soulève une certaine confusion.
Double.Epsilon a-t-il une utilisation pratique dans les comparaisons ?
La formulation MSDN a conduit à un malentendu sur l'utilisation pratique de Double. Épsilon. Comme indiqué dans la réponse fournie, Double.Epsilon représente la plus petite valeur à virgule flottante non dénormale représentable qui n'est pas 0. Elle indique simplement la taille minimale d'une erreur de troncature, pas une marge de comparaison acceptable.
Calcul d'un Epsilon approprié pour les comparaisons d'égalité
Pour les comparaisons d'égalité, une approche plus pratique consiste à utiliser un epsilon basé sur l'ampleur des valeurs comparées. Par exemple :
public static bool AboutEqual(double x, double y) { double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15; return Math.Abs(x - y) <= epsilon; }
Cette méthode utilise la plus grande des valeurs absolues des deux nombres multipliée par une petite constante (1E-15) pour déterminer la marge acceptable de comparaison.
Considérer les comparaisons supérieures à et inférieures à
Pour les comparaisons telles que supérieure ou inférieure à, le même principe s'applique. L'epsilon doit être calculé en fonction de l'ampleur des nombres comparés pour tenir compte des erreurs de troncature potentielles.
Meilleure mise en œuvre pour les comparaisons d'égalité et d'inégalité
En résumé, Double .Epsilon ne peut pas être directement utilisé comme marge d'égalité acceptable, supérieure, inférieure, inférieure ou égale, ou supérieure ou égale aux comparaisons de nombres à virgule flottante. Au lieu de cela, un epsilon spécifique au contexte doit être calculé pour garantir des comparaisons précises.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!