C++ 我需要删除分支/if语句来改进管道:这里怎么做?

C++ 我需要删除分支/if语句来改进管道:这里怎么做?,c++,branch,pipeline,C++,Branch,Pipeline,这是我的密码: inline void ScaleValue(double &value) { // bipolar if (!mIsBipolar) { value = (value + 1.0) / 2.0; } // amount value *= mAmount; } 您将如何优化它删除分支/if?我在一个DSP环境中,我需要尽可能地优化。如果双相情感障碍是一个难题,那么 inline void ScaleValue(d

这是我的密码:

inline void ScaleValue(double &value) {
    // bipolar
    if (!mIsBipolar) {
        value = (value + 1.0) / 2.0;
    }

    // amount
    value *= mAmount;
}
您将如何优化它删除分支/if?我在一个DSP环境中,我需要尽可能地优化。

如果双相情感障碍是一个难题,那么

inline void ScaleValue(double &value) {
    value = mAmount * ((1+mIsBipolar)/2.0 * value + (1-mIsBipolar)/2.0);
应该与以前的代码完全相同

当Misparial为false时,其int表示为0,因此

value = mAmount * ((1+0)/2.0 * value + (1-0)/2.0);
如果这是真的,那么:


这正是您的公式。

如果您的目标是删除If,那么您几乎可以始终执行以下操作

inline void ScaleValue(double &value) {
    value = mIsBipolar*value + !mIsBipolar*((value + 1.0) / 2.0)
    value *= mAmount;
}
如果MISPOLIAL为真,则值保持其原始值=MISPOLIAL*值
否则它将在+号的右侧获取值!双相情感障碍*值+1.0/2.0。

双相情感障碍的类型是什么?这是一个难题。对或错。但我可以切换到int 1/0,如果它更适合,但我猜它是一样的。
inline void ScaleValue(double &value) {
    value = mIsBipolar*value + !mIsBipolar*((value + 1.0) / 2.0)
    value *= mAmount;
}