Подтвердить что ты не робот

Самый короткий способ рассчитать разницу между двумя числами?

Я собираюсь сделать это на С++, но мне пришлось делать это на нескольких языках, это довольно распространенная и простая проблема, и это последний раз. У меня было достаточно кодирования, как и у меня, я уверен, что должен быть лучший метод, поэтому я отправляю его здесь, прежде чем я напишу тот же длинный метод на другом языке;

Рассмотрим (lilies!) следующий код;

// I want the difference between these two values as a positive integer
int x = 7
int y = 3
int diff;
// This means you have to find the largest number first 
// before making the subtract, to keep the answer positive
if (x>y) { 
     diff = (x-y);
} else if (y>x) {
     diff = (y-x);
} else if (x==y) {
    diff = 0;
}

Это может показаться мелочным, но для меня это очень похоже, просто чтобы получить разницу между двумя номерами. Это на самом деле вполне разумный способ делать что-то, и я неоправданно педантичен, или мой здравый смысл покалывает с полным основанием?

4b9b3361

Ответ 1

Просто получите абсолютное значение разницы:

#include <cstdlib>
int diff = std::abs(x-y);

Ответ 2

Использование функции std::abs() - один из ясных способов сделать это, как предложили другие.

Но, возможно, вам интересно кратко написать эту функцию без вызовов библиотеки.

В этом случае

diff = x > y ? x - y : y - x;

- короткий путь.

В ваших комментариях вы предположили, что вас интересует скорость. В этом случае вам могут быть интересны способы выполнения этой операции, для которых не требуется ветвление. Эта ссылка описывает некоторые.

Ответ 3

#include <cstdlib>

int main()
{
    int x = 7;
    int y = 3;
    int diff = std::abs(x-y);
}

Ответ 4

Хорошо, это зависит от того, что вы подразумеваете под сокращением. Время выполнения Fastet, самая быстрая компиляция, наименьшее количество строк, наименьший объем памяти. Я предполагаю, что вы имеете в виду время выполнения.

#include <algorithm>    // std::max/min   
int diff = std::max(x,y)-std::min(x,y);

Это два сравнения и одна операция (эта неизбежна, но может быть оптимизирована с помощью определенных побитовых операций с конкретными случаями, однако компилятор может это сделать для вас). Также, если компилятор достаточно умен, он может выполнить только одно сравнение и сохранить результат для другого сравнения. Например, если X > Y, то из первого сравнения вы знаете, что Y < X, но я не уверен, используют ли компиляторы это.