Сравнение типов с плавающей точкой - PullRequest
3 голосов
/ 19 июля 2010

Есть ли различия в производительности между

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

и

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

Они делают то же самое за кулисами или есть что-то еще. У меня есть фрагмент кода, критичного к производительности, который выполняет это сравнение много-много раз, и я хотел убедиться, что ничего не происходит, чем я думал.

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

Ниже приводится общее замечание, независимо от производительности. Вы должны знать, что существует небольшая разница между использованием оператора и метода IComparable. Они почти делают то же самое. Разница в том, что оба ваших значения равны NaN, и вы проверяете равенство. Смотрите следующий пример:

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

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

Причиной такого несоответствия является то, что для интерфейса IComparable требуется, чтобы x.CompareTo(x) возвращал ноль.

2 голосов
/ 19 июля 2010

Первый будет немного быстрее и намного более читабельным.

x > y компилируется в инструкцию IL, которая сравнивает два значения в стеке.

x.CompareTo(y) > 0 компилируетсяк обычному вызову метода с последующим сравнением, которое будет немного медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...