Вот мой код:
inline void ScaleValue(double &value) {
// bipolar
if (!mIsBipolar) {
value = (value + 1.0) / 2.0;
}
// amount
value *= mAmount;
}
Как бы вы оптимизировали его, удалив ветки / если? (Я в контексте DSP, мне нужно оптимизировать, насколько это возможно).
Если mIsBipolar
это bool
тогда это
inline void ScaleValue(double &value) {
value = mAmount * ((1+mIsBipolar)/2.0 * value + (1-mIsBipolar)/2.0);
должен работать точно так же, как ваш предыдущий код.
Когда mIsBipolar является false
тогда его int
представление равно 0, и поэтому у вас есть
value = mAmount * ((1+0)/2.0 * value + (1-0)/2.0);
когда он является true
затем:
value = mAmount * ((1+1)/2.0 * value + (1-1)/2.0);
что именно ваша формула.
Если вашей целью является удаление if и затем, вы можете (почти) всегда делать следующее.
inline void ScaleValue(double &value) {
value = mIsBipolar*value + !mIsBipolar*((value + 1.0) / 2.0)
value *= mAmount;
}
если mIsBipolar
истина, то значение сохраняет свое первоначальное значение value = mIsBipolar*value
в противном случае он получает значение в правой части +
знак !mIsBipolar*((value + 1.0) / 2.0)
,