gpt4 book ai didi

c - 计算C中数字符号相反的最快方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:16 24 4
gpt4 key购买 nike

我们都知道sgn()函数。它可以在 C 中像下面这样实现:

inline int sgn(int x)
{
if(x > 0) {
return 1;
} else if(x < 0) {
return -1;
} else {
return 0;
}
}

或者,更高效的无分支版本:

inline int sgn(int x)
{
return (x > 0) - (x < 0);
}

我想知道的是计算给定数字符号的相反的最快方法,可以这样写:

inline int asgn(int x)
{
if(x > 0) {
return -1;
} else if(x < 0) {
return 1;
} else {
return 0;
}
}

据我所知最快的方法是:

inline int asgn(int x)
{
return (x >> (sizeof(x) * CHAR_BIT - 1)) | !!x;
}

这种方法的唯一流程是它依赖于带符号数的右位移位是算术的,根据标准,情况不一定如此。是否有更快和/或更便携的解决方案?

最佳答案

你不能调换顺序吗

inline int sgn(int x)
{
return (x > 0) - (x < 0);
}

inline int asgn(int x)
{
return (x < 0) - (x > 0);
}

顺便说一句,除非您的输入数据相当随机,否则由于分支预测,无分支代码可能比“分支”代码慢。最好尝试这两个版本,看看哪个对您来说实际上更快。

关于c - 计算C中数字符号相反的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066748/

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