, я пытаюсь оптимизировать следующий кусок кода, который является узким местом в моем приложении. Что он делает: это требует двойных значений значение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)];
}
}