我试图在C中限制2个整数之间的差异;基本上绝对值(a-b)<界。有没有人知道,对于Arm Cortex gcc编译器,如果我最好取差值的绝对值:
if (abs( a - b) < bound)
{
.........
}
或者我应该做两个比较:
int diff;
diff = a - b;
if ((bound > diff) && (bound > -diff))
{
.......
}
我知道这与编译器优化和Arm指令集有很大关系,所以这不是我可以随便决定的。
2条答案
按热度按时间avkwfej41#
试试看
GCC的一个版本
fun0和fun2是相同数量的指令,没有分支,利用条件执行(没有条件执行,结果可能有一个明确的赢家)。中间的一个,你的选择,招致一个分支,但有一个更短的路径,所以很难称之为失败者在这种情况下。9或5条指令(包括分支)与9和9相比。
目标不同,结果可能不同。
另一种方法:
第二种解决方案具有指令较少的路径,但引发分支,另一种路径较长。
fivyi3re2#
两者都是未定义的行为。减法可能溢出。你需要检查评论中提到的@e2-e4,哪个更大,哪个更小。它将被gcc很好地优化。
两者编译完全相同的代码。