vc6下判断一个浮点数是否为NAN(INF)

NAN是指not a number。

浮点数在进行除零操作之后,就会变成NAN(INF)。

可以使用下列函数来判断该值是否为NAN(INF)。

库函数:int _isnan(double);  

    int _finite(double);//vc下使用该函数

//若传入的double值无效,函数返回0. 需要包含库文件<float.h>

也可写自定义函数来进行判断(vc下不行)

  
1 bool is_nan( double dVal)
2 {
3    if (dVal == dVal)
4      return false ;
5
6    return true ;
7 }

在vc6下该无效值为1.#INF000000000

 不同的编译器,这个值存在差异。

这个差异可以使用c++标准库来屏蔽。如下代码:

  
#include < limits >

bool is_nan( double dVal)
{
  
double dNan = std::numeric_limits < double > ::quiet_NaN();
  
if (dVal == dNan)
    
return true ;

  
return false ;
}

在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);


你可能感兴趣的:(浮点数)