Рассмотрим такую задачу. Даны две переменные: \(x\) и \(y\). Требуется их сравнить. И если \(x>y\), то следует вывести значение \(x\), а в противном случае - значение \(y\). Любой начинающий программист спросит - и что тут сложного? А сложность в том, что нельзя использовать операции сравнения или условные операторы, которые есть в любом языке программирования. Категорически нельзя. Тогда возникает вопрос - а зачем это все надо? Ответ - в нашем конкретном случае - надо научиться сравнивать две величины в математическом блокноте.
Способ 2. Применяем алгебраическое выражение.
x*(1+abs(x-y)/(x-y))/2 + y*(1+abs(x-y)/(y-x))/2
Покажем на примере как это работает в математическом блокноте:
Предыдущее выражение в примере было записано так, чтобы было понятно почему в результате выводится большеt из двух чисел. А теперь выполним упростим его:
(abs(x-y)+x+y)/2
Проверим работу в математическом блокноте:
Но, это выражение лучше чем первый вариант не только краткостью. Оно работает и в случае, когда числа совпадают. А предыдущее (из-за наличия разности в знаменателе) выдает ошибку (NaN). Можете проверить самостоятельно.
Но, все таки не все еще замечательно. Мы применили функцию, для нахождения значения абсолютной величины. Да, в каждом языке программирования она есть, но все же... Может можно обойтись и без нее, используя еще более стандартные возможности. А легко. Заменяем функцию abs() на вот такую: