f(x)的无分支实现:=如果x == 0则为0 else(x * log(x))

我有这个C函数:

double f(int x)
{
    if (x <= 0)
        return 0.0;
    else
        return x * log(x);
}

我在一个紧凑的循环中调用,并希望摆脱分支,看看它是否提高了性能.

我不能用这个:

double f(int x)
{
    return x * log(x);
}

因为它在x == 0时返回NaN(大约25%的时间都是如此).

有没有另一种方法来实现它,以便它在x == 0时返回0,但仍然摆脱分支?

(我不太关心负输入,因为这些是错误,而零则不是.)

任何免费分支代码必须包含x * log(x)的计算以涵盖“正常”情况.

因此,在尝试提出无分支代码之前,仅测量x * log(x)的速度.除非它比你的代码快得多,否则这里没有什么重要的.我怀疑它不会.

相关文章
相关标签/搜索