Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
float f = -0.050000;
我想做下一个规则:
if (f < 0) f -= 0.2; else f += 0.2;
有一个选项可以通过一行来完成吗?
您可以为此使用 C++ 无分支符号函数的修改版本:
f += 0.2 * ((0<=f)-(f<0));
表达方式
(0<=f)-(f<0)
计算-1何时f小于零,1何时f大于或等于零。
-1
f
1
如果可以使用copysign或等效项,则
f += copysign(0.2,f);
可能是现代计算机最快的,因为它避免了分支。鉴于现代 CPU 上处理管道的长度,分支错误预测很容易花费几个周期
你可以这样做:
f += (f < 0) ? -0.2 : +0.2;
你如何使用条件运算符?
f += (f < 0) ? -0.2f : 0.2f;