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;
}