Оптимизация линейной интерполяции для знака

В тесном цикле я делаю линейную интерполяцию между двумя значениями с плавающей запятой. Однако единственной необходимой частью результата является знак (будь то результат отрицательный или положительный). Я делаю типичную операцию lerp прямо сейчас, f между a и b.

a + f * (b - a);

Есть ли что-то более эффективное, учитывая, что мне просто нужно знать результирующий знак, а не фактическое значение lerped?

Изменить: «F» представляет собой набор фиксированных расстояний вдоль интерполяции, которые известны заранее.

1

Решение

Вы можете вычислить, меняет ли интерполированное значение знак в заданном диапазоне:

if Sign(a) <> Sign(b) then  //don't forget about zero sign
change occurs

В этом случае найти f параметр, где lerp = 0

a + f0 * (b - a) = 0
f0 = a / (a+b)

Для меньших значений lerp имеет тот же знак, что и aдля большего — такой же знак, как bтак что вам не нужно рассчитывать lerp ценность — просто сравнить f с f0

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]