Maison >développement back-end >C++ >Dois-je utiliser Double.Epsilon pour les comparaisons à virgule flottante ?
Double.Epsilon dans les comparaisons à virgule flottante
Question :
La documentation MSDN pour Double.Epsilon déclare qu'il ne doit pas être utilisé pour déterminer l'égalité entre des nombres à virgule flottante. Cependant, certaines ressources suggèrent de l'utiliser à des fins de comparaison. Est-il possible d'utiliser Double.Epsilon pour l'égalité et d'autres comparaisons, telles que supérieur à et inférieur à ?
Réponse :
La valeur Epsilon représente le plus petit non représentable -valeur à virgule flottante dénormalisée autre que 0. Bien que cela puisse sembler un candidat naturel pour epsilon dans les comparaisons, ce n'est pas assez précis pour cela but.
Double.Epsilon reflète la plus petite erreur de troncature représentable, mais elle varie considérablement en fonction de l'ampleur des nombres comparés. Par exemple, pour deux nombres proches de 1, Double.Epsilon pourrait être 0,0000000000000002220446, tandis que pour deux nombres proches de 1 000 000 000 000 000, il pourrait être 222 044 604 925 093 800. Cela signifie que s'appuyer sur Double.Epsilon pour l'égalité ou d'autres comparaisons ne fournirait pas de résultats cohérents.
Estimation Epsilon alternative pour l'égalité :
Une approche recommandée pour comparer les valeurs flottantes les valeurs en points pour l'égalité consistent à utiliser un epsilon de constante * 1E-15. Cela signifie que le type Double peut représenter des valeurs avec une précision de 15 chiffres. 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; }
Opérateurs de comparaison :
Bien que Double.Epsilon ne puisse pas être utilisé directement pour les comparaisons, la méthode AboutEqual peut être adaptée pour supérieur à, inférieur à , inférieur ou égal à et supérieur ou égal à :
Considérations supplémentaires :
Il est important de noter que les erreurs de troncature peuvent s'accumuler, en particulier lorsqu'il s'agit de valeurs calculées. Par conséquent, vous devrez peut-être ajuster la valeur epsilon en conséquence pour obtenir une précision appropriée.
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!