是否可以检查号码是否为NaN
?
答案 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,但这仅适用于指针。一个数字本身不能为空,它要么具有您放入的已知值,要么具有来自内存中的任何内容的随机数据。