我有这个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
,但仍然能够消除分支?(我不太关心负数输入,因为这些是错误,而零不是。)
return x * log(x)
。这肯定会给出错误的答案,但它不会比您可能想出的无分支代码更慢。因此,除非比您拥有的代码快得多,否则可以停止了。没有必要实际想出无分支代码,因为您已经确定它对提高性能没有帮助。 - Steve Jessop