C中有一个符号函数:
int sign(int x)
{
if(x > 0) return 1;
if(x < 0) return -1;
return 0;
}
不幸的是,比较成本非常高,所以我需要修改函数以减少比较次数。
我尝试了以下方法:
int sign(int x)
{
int result;
result = (-1)*(((unsigned int)x)>>31);
if (x > 0) return 1;
return result;
}
在这种情况下,我只得到一个比较。
有什么办法可以完全避免比较吗?
编辑 可能的重复不会给出问题的答案,因为所有答案都是 C++,使用比较(我应该避免)或不返回-1
, +1
, 0
.