【发布时间】:2021-02-16 15:42:29
【问题描述】:
我正在寻找一种快速(无分支)代码来计算以下内容:
if ( k > 0 )
x += i;
else if ( k < 0 )
x -= i;
else if ( k == 0 )
// do nothing.
其中k、x 和i 属于int 类型。
解决方案可以使用内在函数。
【问题讨论】:
-
你破坏了编译器为此生成的低效代码?
-
你怎么知道它不是无分支的?
-
user2052436,使用
x += signof(k)*i;的方法在i == INT_MIN, k < 0时会遭受潜在的UB。你关心这个角落案例吗? -
这个问题和目前发布的所有答案都是胡乱猜测。在不显示为某些 CPU 生成的机器代码的情况下讨论这个是毫无意义的。
-
@Lundin 像这样的微优化问题的本质是没有单一的最佳答案。您唯一能做的就是收集许多不同的方法,并在您自己的最终配置中对它们进行基准测试。问题中已经有一个假设,即无分支会更快,但这也不是给定的。