是否可以在 C/C + + 中将 NaN分配给 double或 float?就像在 JavaScript 中一样: a = NaN。所以稍后您可以检查变量是否为数字。
NaN
double
float
a = NaN
这可以通过使用 C + + 中的 numeric _ limit 来实现:
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.
在 C 中,NAN在 <math.h>中声明。
NAN
<math.h>
在 C + + 中,std::numeric_limits<double>::quiet_NaN()在 <limits>中声明。
std::numeric_limits<double>::quiet_NaN()
<limits>
但是为了检查一个值是否为 NaN,您不能将它与另一个 NaN 值进行比较。在 C 中使用来自 <math.h>的 isnan(),或者在 C + + 中使用来自 <cmath>的 std::isnan()。
isnan()
<cmath>
std::isnan()
正如其他人指出,你正在寻找的 std::numeric_limits<double>::quiet_NaN(),虽然我不得不说,我更喜欢的 Cppreference.com文件。特别是因为这句话有点含糊:
只有当 std: : numeric _ limit: : has _ static _ NaN = = true 时才有意义。
在这个网站上很容易知道这意味着什么,如果你查看他们在 std::numeric_limits::has_quiet_NaN上的章节,就会发现:
std::numeric_limits::has_quiet_NaN
此常量对于所有浮点类型都有意义,并且在 std: : numeric _ limit: : is _ iec559 = = true 时保证为 true。
这解释了 给你如果 true意味着你的平台支持 IEEE 754标准。这个 上一个帖子解释说,这应该是真正的大多数情况下。
true
IEEE 754
这是否可能指定一个 NaN 到一个双精度或浮点在 C... ?
是的,由于 C99,(C + + 11) <math.h>提供以下功能:
#include <math.h> double nan(const char *tagp); float nanf(const char *tagp); long double nanl(const char *tagp);
这就像他们的 strtod("NAN(n-char-sequence)",0)对应和 NAN的任务。
strtod("NAN(n-char-sequence)",0)
// Sample C code uint64_t u64; double x; x = nan("0x12345"); memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64); x = -strtod("NAN(6789A)",0); memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64); x = NAN; memcpy(&u64, &x, sizeof u64); printf("(%" PRIx64 ")\n", u64);
样本输出: (取决于实现)
(7ff8000000012345) (fff000000006789a) (7ff8000000000000)
检查变量是否是数字。
从 <math.h>, <cmath>使用 isnan(), std::isnan()。
<math.h>, <cmath>
isnan(), std::isnan()
是的,通过指针的概念,你可以像这样对 int 变量做:
int *a; int b=0; a=NULL; // or a=&b; for giving the value of b to a if(a==NULL) printf("NULL"); else printf(*a);
它非常简单明了,在 Arduino IDE 中对我很有用。