Оптимизация головной боли - удаление IF из посмотреть таблицу

, я пытаюсь оптимизировать следующий кусок кода, который является узким местом в моем приложении. Что он делает: это требует двойных значений значение1 и значение2 и пытается найти максимум, включая исправительный коэффициент. Если разница между обоими значениями превышает 5,0 (LUT масштабируется по фактору 10), я могу просто принять максимальное значение этих двух. Если разница меньше 5,0, я могу использовать исправительный коэффициент от LUT.

У кого-нибудь есть идея, что может быть лучшим стилем для этого куска кода? Я не знаю, где я теряю время - это большое количество IFS или умножения на 10?

double value1, value2;
// Lookup Table scaled by 10 for (ln(1+exp(-abs(x)))), which is almost 0 for x > 5 and symmetrical around 0. LUT[0] is x=0.0, LUT[40] is x=4.0.
const logValue LUT[50] = { ... }

if (value1 > value2)
{
    if (value1 - value2 >= 5.0)
    {
        return value1;
    }
    else
    {
        return value1 + LUT[(uint8)((value1 - value2) * 10)];
    }
}
else
{
    if (value2 - value1 >= 5.0)
    {
        return value2;
    }
    else
    {
        return value2 + LUT[(uint8)((value2 - value1) * 10)];
    }
}
6
задан Brian Tompsett - 汤莱恩 9 February 2017 в 16:08
поделиться