c++ 如何可移植地强制NAN * 零在特定表达式中给予零而不分支?

x4shl7ld  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(106)
  • (我觉得这应该是一个重复的问题,但我在搜索时找不到正确的搜索词。

一般来说,(安静的)NAN乘以零应该得到给予NAN --它确实如此。
然而,在我的代码的一个特定的性能关键部分,我希望零乘以 * 任何 * 为零。
在C++中有什么快速的方法可以做到这一点?

lx0bsm1f

lx0bsm1f1#

double mymult(double a, double b){
  double result[]={a*b,0.};
  return result[(a==0.)|(b==0.)];
}

字符串
应该避免分支:仔细检查生成的程序集。
并非所有bool计算都隐含分支。

s5a0g9ez

s5a0g9ez2#

你不能用算术来做。你必须测试零。

相关问题