(我觉得这应该是一个重复的问题,但我在搜索时找不到正确的搜索词。)
一般来说,(安静的)NAN乘以零应该得到NAN——而且确实如此。
但是,在我的代码的一个特定的性能关键部分,我希望零次anything为零。
在 C++ 中执行此操作的快速方法是什么?
double mymult(double a, double b){
double result[]={a*b,0.};
return result[(a==0.)|(b==0.)];
}
应避免分支:仔细检查生成的程序集。
并非所有
bool
计算都意味着分支。
你无法用算术来做到这一点。你必须测试为零。