3 votes

Comparaison des types de virgule flottante

Y a-t-il des différences de performance entre

 float x, y;
 // Set x and y
 if(x > y)
 {
    // do something
 }

y

 float x,y;
 // Set x and y
 if(x.CompareTo(y) > 0)
 {
    // do something
 }

Font-ils la même chose dans les coulisses ou y a-t-il plus que cela ? J'ai un morceau de code dont les performances sont critiques et qui effectue cette comparaison de très nombreuses fois, et je voulais vérifier qu'il n'y avait pas plus que ce que je pensais.

4voto

0xA3 Points 73439

Ce qui suit est une remarque générale, sans tenir compte des performances. Il faut savoir qu'il y a une légère différence entre l'utilisation de l'opérateur et de l'option IComparable méthode. Ils sont presque faisant de même. La différence est que lorsque vos deux valeurs sont NaN et vous vérifiez l'égalité. Voir l'exemple suivant :

float x = float.NaN;
float y = float.NaN;

bool resultOperator = (x == y);               // will be false
bool resultCompareTo = (x.CompareTo(y) == 0); // will be true(!)

Cette incohérence s'explique par le fait que les IComparable l'interface exige que x.CompareTo(x) renvoie zéro.

2voto

SLaks Points 391154

Le premier sera un peu plus rapide et beaucoup plus lisible.

x > y se compile en une instruction IL qui compare deux valeurs sur la pile.

x.CompareTo(y) > 0 se compile en un appel de méthode normal suivi d'une comparaison, ce qui sera un peu plus lent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X