C / C ++ NaN常量(文字)?

这是可能的分配NaNdoublefloat在C / C + +? 就像在JavaScript中一样: a = NaN 。 所以以后你可以检查一下variables是否是数字。

在C中, NAN是在<math.h>声明的。

在C ++中, std::numeric_limits<double>::quiet_NaN()<limits>声明。

但是为了检查一个值是否是NaN,你不能将它与另一个NaN值进行比较。 而是使用C语言中的<math.h>中的std::isnan()或C ++中<cmath>中的std::isnan()

正如其他人指出,你正在寻找std::numeric_limits<double>::quiet_NaN()虽然我不得不说我更喜欢cppreference.com文件。 特别是因为这个陈述有点含糊:

只有当std :: numeric_limits :: has_quiet_NaN == true时才有意义。

这很容易弄清楚这是什么意思在这个网站上,如果你检查他们的部分在std::numeric_limits::has_quiet_NaN它说:

这个常量对于所有浮点types都是有意义的,如果std :: numeric_limits :: is_iec559 == true,则保证为真。

正如这里解释的那样,如果true意味着你的平台支持IEEE 754标准。 这个前面的线程解释了这在大多数情况下应该是真的。

这可以使用C ++中的numeric_limits完成:

http://www.cplusplus.com/reference/limits/numeric_limits/

这些是你可能想要看的方法:

 infinity() T Representation of positive infinity, if available. quiet_NaN() T Representation of quiet (non-signaling) "Not-a-Number", if available. signaling_NaN() T Representation of signaling "Not-a-Number", if available. 

一般来说,在程序中使用无效的数字并不是一个好主意。 以后可能很难摆脱它们,并且可能导致程序崩溃。

这里有一个很好的方法来捕捉这些数字,而不分配给他们: https : //studiofreya.com/cpp/1-inf-1-ind-and-qnan-floating-point-numbers-and-errors/#Capturing -errors

总之,其中有三个:

  • 对照
  • 使用C ++ 11标准
  • 使用控制字_controlfp和_control87