检查NaN号码

MBZ*_*MBZ 21 c++ numbers

是否可以检查号码是否有问题NaN

pax*_*blo 31

是的,通过使用a NaN不等于任何其他数字的事实,包括它自己.

当你考虑什么NaN意思时,这是有道理的,你创造了一个实际上不能代表"正常"浮点值的价值的事实.

所以,如果你创建两个你不知道它们是什么的数字,你几乎不能认为它们是平等的.它们可能是但是,考虑到数字的可能性相当大(实际上是无限的),两个相同数字的可能性很小:-)

你可以找到一个函数(实际上是宏)isnan(在math.hC和cmathC++中)或只是使用一个NaN值不等于自身的属性:

if (myFloat != myFloat) { ... }
Run Code Online (Sandbox Code Playgroud)

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

int isnan_float (float f) { return (f != f); }
Run Code Online (Sandbox Code Playgroud)

  • 并将`myFloat!= myFloat`包装成某种带有注释的`isnan`函数,以免将来对此不了解的读者感到非常困惑. (2认同)

Mr.*_*Ree 7

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

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

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

卫生署.我应该知道......之前已经回答过这个问题... 在C++中 使用NaN 检查C++中的双重(或浮点)是否为NaN http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan