如何移植强制NAN *零在没有分支的特定表达式中给出零?

时间:2013-12-27 12:01:27

标签: c++ nan

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

一般来说,(安静)NAN次零应该给NAN - 而且确实如此。

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

在C ++中用快速的方法做什么?

2 个答案:

答案 0 :(得分:5)

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

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

并非所有bool计算都意味着分支。

答案 1 :(得分:2)

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