3

ステートメントを使用せずにコードを分岐することは可能ですか?if

4

2 に答える 2

5

はい、できます。GPU スタイルです。

分岐し、最後に値を返す関数があるとします。

float function( float input )
{
    if( input > 0 )
    {
        // do stuff
        finalValue = 2+4+8*input;
        return finalValue ;
    }
    else
    {
        // do other stuff
        finalValue = 1+input;
        return finalValue ;
    }
}

分岐せずにこれを行うには、GPU スタイルのコードを記述します。つまり、両方の分岐を評価し、最後に不要な分岐を破棄します

float function( float input )
{
    // do stuff..regardless
    finalValue1 = 2+4+8*input;

    // do other stuff..regardless
    finalValue2 = 1+input;

    bool resultMask = input > 0 ; // 1 if should use finalValue1.
    return finalValue1*resultMask   +   finalValue2*(1 - resultMask) ;
}

それで、あなたはそれを持っています。分岐なしの分岐、if ステートメントなしの if ステートメント。

于 2013-01-06T21:27:41.300 に答える
1

「ブランチ」と「if」の意味によって異なります。「if」のない、以下のブランチのいずれか。

switch (foo) {

}

または、数えない場合は三項演算子:

x == 0 ? doFunc1() : doFunc2()

お使いの言語が関数ポインターをサポートしている場合:

funcArray[selectedOption]()

あなたはばかげて行うことができます:

boolean once = true;
while (condition && once) {
  doAWhichNeverReturns();
  once = false; 
} 
doB();

しかし、あなたが何をしようとしているのかわからないので、これがあなたの質問に本当に答えているとは思いません。

于 2013-01-06T21:36:32.323 に答える