Можно и не умножать , просто сравнить "знаки" чисел.
А что такое функция
sgn?...
Если она возвращает только значения плюс-минус единичка, то это ровно то же самое, что и использование только логических выражений. Если возвращает ещё и ноль, то всё равно будет работать неверно для отрезка нулевой длины. И в любом случае: сколько дополнительно ресурсов сожрёт обращение к этой функции?...
Да, с нулевым отрезком плохо вышло :(
(Оффтоп)
sgn будет возвращать -1 0 +1, или 0 1 2 (главное чтобы 3 неравных числа). ресурсов сожрет меньше, чем умножение(реализовать можно через логические выражения,
либо используя двоичное представление числа - одно сравнение на равенство 0 и несколько битовых сдвигов. - учитывая, что первый бит знакового числа означает знак числа)
Хотя не факт, что будет работать быстрее. Для разных процессоров\компиляторов разные результаты будут