vc6下判断一个浮点数是否为NAN(INF)
时间:2011-03-10 来源:可可西
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);
相关阅读 更多 +