C / C ++ NaN常量(文字)?
这是可能的分配NaN
的double
或float
在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