1

double当某个值为 aNaN或 an时,我想隔离行为#INF。为了检测 a NaN,我测试

doubleVal != doubleVal

一个#INF呢?doubleVal当是时,这个测试是否正确#INF

4

3 回答 3

4

1.一旦你确定不是乘以如何NaN

http://ideone.com/97FNu

您也可以使用isinfand isnan,但根据它们的实现可能会产生一些开销。

第三种选择是使用 C 最大值宏(或等效的std::numeric_limits):

 bool is_inf_or_nan(double x) 
{
    return !(x <= DBL_MAX && x >= -DBL_MAX); 
}    
于 2012-04-12T09:15:02.790 回答
3

如果您不使用 c++11,那么您需要<boost/math/special_functions/fpclassify.hpp>代替<cmath>, 并进行相应的命名空间更改。

#include <cmath> // or <boost/math/special_functions/fpclassify.hpp>
// ...

    if(isinf(num)){
        // ...
    }
于 2012-04-12T09:11:17.240 回答
2

Boost 中还有一个仅包含标头的库,它具有处理浮点数据类型的简洁工具

#include <boost/math/special_functions/fpclassify.hpp>

您将获得以下功能:

template <class T> bool isfinite(T z);
template <class T> bool isinf(T t);
template <class T> bool isnan(T t);
template <class T> bool isnormal(T t);
于 2012-04-12T09:14:41.823 回答