Double.Epsilon pour les opérations d'égalité et de comparaison
La constante Double.Epsilon contient la plus petite virgule flottante positive nombre qui peut être représenté comme un double sans arrondir à zéro. Il est destiné à servir de guide pour les comparaisons à virgule flottante, mais sa documentation peut prêter à confusion.
Double.Epsilon peut-il être utilisé pour une comparaison directe ?
Non. Double.Epsilon définit la plus petite erreur de troncature possible. Cela signifie que lors de l'exécution d'opérations mathématiques, les nombres à virgule flottante peuvent différer davantage que Double.Epsilon en raison des arrondis. Par conséquent, l'utilisation de Double.Epsilon pour des comparaisons directes peut ne pas refléter avec précision l'égalité mathématique.
Alternatives pour des comparaisons précises
Considérez les alternatives suivantes :
public static bool ApproximatelyEqual(double x, double y) { double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15; return Math.Abs(x - y) <= epsilon; }
public static bool ApproximatelyEqualRelative(double x, double y, double tolerance) { return Math.Abs(x - y) / Math.Max(Math.Abs(x), Math.Abs(y)) <= tolerance; }
Implémentations pour d'autres opérations de comparaison
Pour implémenter des comparaisons supérieures à (>) et inférieures à (<), inversez la logique utilisée pour l'égalité :
Plus grand Que :
public static bool GreaterThan(double x, double y) { return ApproximatelyEqualRelative(x - y, y, 1E-15) > 0; }
Moins de :
public static bool LessThan(double x, double y) { return ApproximatelyEqualRelative(x - y, y, 1E-15) < 0; }
Pour supérieur ou égal à (>=) et inférieur ou égal à (<=), modifiez les implémentations ci-dessus en conséquence :
public static bool GreaterThanOrEqual(double x, double y) { return ApproximatelyEqualRelative(x - y, y, 1E-15) >= 0; } public static bool LessThanOrEqual(double x, double y) { return ApproximatelyEqualRelative(x - y, y, 1E-15) <= 0; }
N'oubliez pas que ces implémentations ne sont que des approximations et doivent être utilisées avec prudence dans les situations où des comparaisons précises sont cruciales.
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!