Записывайте ветвящуюся функцию, которая возвращает 0, 1 или 2, если разница между двумя целыми числами равна нулю, отрицательна или положительна.
Здесь версия с ветвлением:
int Compare(int x, int y)
{
int diff = x - y;
if (diff == 0)
return 0;
else if (diff < 0)
return 1;
else
return 2;
}
Здесь версия, которая может быть быстрее в зависимости от компилятора и процессора:
int Compare(int x, int y)
{
int diff = x - y;
return diff == 0 ? 0 : (diff < 0 ? 1 : 2);
}
Можете ли вы придумать более быстрый вариант без ветвей?
СУЩНОСТЬ
10 решений, которые я тестировал, имели аналогичную производительность. Фактические числа и победитель варьировались в зависимости от компилятора (icc/gcc), параметров компилятора (например, -O3, -march = nocona, -fast, -xHost) и машины. Решение Canon хорошо зарекомендовало себя во многих тестах, но опять же преимущество в производительности было незначительным. Я был удивлен, что в некоторых случаях некоторые решения были медленнее, чем наивное решение с ветвями.