2017-05-18 1 views
-1

HERESに私のコード:パイプライニングを改善するために分岐/ if文を削除する必要があります:ここでそれを行う方法は?

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

    // amount 
    value *= mAmount; 
} 

は、どのようにそれがあれば/枝を取り除く最適化するのでしょうか? (私はDSPのコンテキストで、私は可能な限り最適化する必要があります)。

+0

「mIsBipolar」の種類は何ですか? – sithereal

+0

それはブールです。正しいか間違っているか。しかし、それがより良く適合すれば私はint 1/0に切り替えることができます(しかし、私はそれが同じであると思います)。 – markzzz

答えて

1

mIsBipolarた場合は、この

inline void ScaleValue(double &value) { 
    value = mAmount * ((1+mIsBipolar)/2.0 * value + (1-mIsBipolar)/2.0); 

は正確にあなたの前のコードとして動作するはずboolです。

mIsBipolarがfalseでそのint表現が0であり、それは、その後trueあるときに、あなたは

value = mAmount * ((1+0)/2.0 * value + (1-0)/2.0); 

を持っています。まさにあなたの式で

value = mAmount * ((1+1)/2.0 * value + (1-1)/2.0); 

1

あなたの目標がifを削除している場合は、(ほとんど)常に次のようにすることができます。 mIsBipolarがtrueの場合、その値が元の値value = mIsBipolar*value が、それ以外の場合は+符号!mIsBipolar*((value + 1.0)/2.0)の右側に値を取得し続ける

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

関連する問題