2
float f = -0.050000;

我想做下一个规则:

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

有一个选项可以通过一行来完成吗?

4

4 回答 4

6

您可以为此使用 C++ 无分支符号函数的修改版本:

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

表达方式

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

计算-1何时f小于零,1何时f大于或等于零。

于 2013-05-26T13:45:14.820 回答
4

如果可以使用copysign或等效项,则

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 回答