检查NaN数[重复]
Posted
技术标签:
【中文标题】检查NaN数[重复]【英文标题】:check NaN number [duplicate] 【发布时间】:2011-03-27 02:39:01 【问题描述】:是否可以检查号码是否为NaN
?
【问题讨论】:
NIL(C-ese 中为 NULL)是一个特殊的 pointer 值。数字没有 NULL 之类的东西。您是否正在考虑浮点 NaN? 我的意思是 NaN,我的错,修复了 Q。 这能回答你的问题吗? Checking if a double (or float) is NaN in C++ 【参考方案1】:您正在寻找null,但这仅对指针有用。数字本身不能为空,它要么具有您放入其中的已知值,要么具有之前内存中的随机数据。
【讨论】:
【参考方案2】:是的,因为NaN
不等于任何其他数字,包括它自己。
当您考虑 NaN
的含义时,这是有道理的,即您创建了一个实际上无法用“正常”浮点值表示的值。
因此,如果您创建两个不知道它们是什么的数字,则很难认为它们相等。它们可能是,但是,考虑到它可能是相当大的数字可能性(实际上是无限的),两个相同数字的可能性微乎其微:-)
您可以查找一个函数(实际上是宏),例如 isnan
(在 C 的 math.h
和 C++ 的 cmath
中),或者只使用 NaN
值不等于自身的属性。喜欢:
if (myFloat != myFloat) ...
如果由于某种奇怪的原因,您的 C 实现没有 isnan
(它应该,因为标准要求它),您可以编写自己的代码,例如:
int isnan_float (float f) return (f != f);
【讨论】:
并将myFloat != myFloat
包装成某种带有注释的isnan
函数,以免将来不了解它的读者非常困惑。【参考方案3】:
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
【讨论】:
以上是关于检查NaN数[重复]的主要内容,如果未能解决你的问题,请参考以下文章