gpt4 book ai didi

algorithm - 这是获得数字绝对值的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:24 27 4
gpt4 key购买 nike

实现返回数字绝对值的操作的最快方法是什么?

x=root(x²)

if !isPositive(x):
x=x*(-1)

实际上这个问题可以翻译成,if 有多快(以及为什么)。

我的大学编程教授总是告诉我要避免 if 因为它们非常慢,但我总是忘记问有多慢以及为什么。这里有人知道吗?

最佳答案

在不使用 if 语句的情况下计算 2s 补码整数的绝对值有一个绝妙的技巧。从理论上讲,如果值为负,则您希望切换这些位并加一,否则您希望按原样传递这些位。 XOR 1 恰好切换 A,A XOR 0 恰好保持 A 不变。所以你想做这样的事情:

  uint32_t temp = value >> 31;     // make a mask of the sign bit
value ^= temp; // toggle the bits if value is negative
value += temp & 1; // add one if value was negative

原则上,只需三个汇编指令(无需分支)即可完成。并且您想认为通过 math.h 获得的 abs() 函数可以最佳地执行此操作。

没有分支 == 更好的性能。与@paxdiablo 上面的回复相反,这在深度管道中确实很重要,代码中的分支越多,分支预测器就越有可能出错并不得不回滚等。如果你避免分支在哪里有可能,事情会在你的核心中全速前进 :)。

关于algorithm - 这是获得数字绝对值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/664852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com