如何在不分支的情况下便携式地强制 NAN * 零在特定表达式中给出零?

问题描述 投票:0回答:2

(我觉得这应该是一个重复的问题,但我在搜索时找不到正确的搜索词。)

一般来说,(安静的)NAN乘以零应该得到NAN——而且确实如此。

但是,在我的代码的一个特定的性能关键部分,我希望零次anything为零。

在 C++ 中执行此操作的快速方法是什么?

c++ performance nan branchless
2个回答
6
投票
double mymult(double a, double b){
  double result[]={a*b,0.};
  return result[(a==0.)|(b==0.)];
}

应避免分支:仔细检查生成的程序集。

并非所有

bool
计算都意味着分支。


2
投票

你无法用算术来做到这一点。你必须测试为零。

© www.soinside.com 2019 - 2024. All rights reserved.