在CUDA中测试无穷大

han*_*nes 6 c c++ numerical cuda

在CUDA程序中,我最近从使用的测试转换为无限性

return x==INFINITY || x==-INFINITY;
Run Code Online (Sandbox Code Playgroud)

其中INFINITY是从math.h中,至

return !isfinite(x);
Run Code Online (Sandbox Code Playgroud)

得到不同的结果,我感到非常惊讶.gnu.org建议他们实际应该表现得相似.我错过了什么吗?是不允许INFINITY在CUDA内核中使用?

编辑: 我刚发现isinf并注意到使用检查

return isinf(x);
Run Code Online (Sandbox Code Playgroud)

给出与INFINITY检查相同的结果.为什么不 isfinite(x)==!isinf(x)呢?

Ste*_*non 7

isfinite(a)是一样的!isnan(a) && !isinf(a).如果x为NaN,那么这两个isfinite(x)isinf(x)是假的.

  • @hannes:确保编译器没有对`(x!= x)`进行优化. (3认同)