检查NaN号码

时间:2010-08-09 03:01:41

标签: c++ numbers

是否可以检查号码是否为NaN

3 个答案:

答案 0 :(得分:31)

是的,通过使用NaN不等于任何其他数字的事实,包括其自身。

当您考虑NaN的含义时,这是有道理的,事实上您创建了一个实际上不能用“正常”浮点值表示的值。

所以,如果你创造了两个不知道它们是什么的数字,你很难认为它们是平等的。他们可能但是,鉴于数字的可能性相当大(实际上是无限的),两个相同数字的可能性很小: - )

您可以查找一个函数(实际上是宏),例如isnan(在math.h表示C和cmath表示C ++)或只使用NaN的属性价值不等于:

if (myFloat != myFloat) { ... }

如果由于一些奇怪的原因,你的C实现没有isnan(它应该,因为标准要求它),你可以编写自己的代码,如:

int isnan_float (float f) { return (f != f); }

答案 1 :(得分:7)

在Linux / gcc下,有 isnan(double),符合BSD4.3。

C99提供 fpclassify(x) isnan(x)
(但C ++标准/编译器不一定包含C99功能。)

应该有一些方法与std :: numeric_limit<> ...检查......

卫生署。我应该知道......这个问题之前已经得到了回答...... Checking if a double (or float) is NaN in C++ Using NaN in C++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan

答案 2 :(得分:-1)

您正在寻找null,但这仅适用于指针。一个数字本身不能为空,它要么具有您放入的已知值,要么具有来自内存中的任何内容的随机数据。