2
float f = -0.050000;

次のルールを実行したい:

if (f < 0) f -= 0.2;
else       f += 0.2;

1行で行うオプションはありますか?

4

4 に答える 4

6

これには、C++ ブランチレスsignum関数の修正版を使用できます。

f += 0.2 * ((0<=f)-(f<0));

表現

(0<=f)-(f<0)

が 0 未満の場合、 が 0 以上の場合-1に評価されます。f1f

于 2013-05-26T13:45:14.820 に答える
4

コピーサインまたは同等のものが利用できる場合、

f += copysign(0.2,f);

分岐を回避するため、最新のコンピューターで最も高速である可能性があります。最新の CPU でパイプラインを処理する長さを考えると、分岐の予測ミスは簡単に数サイクルのコストがかかる可能性があります

于 2013-05-26T13:50:29.307 に答える
3

あなたがすることができます:

f += (f < 0) ? -0.2 : +0.2;
于 2013-05-26T13:42:36.107 に答える
1

条件演算子を使ってみませんか?

f += (f < 0) ? -0.2f : 0.2f;
于 2013-05-26T13:42:54.657 に答える