这可以分配NaN给一个double或float在C/C++中吗?就像你在JavaScript中一样:a = NaN.所以稍后您可以检查变量是否为数字.
Mik*_*our 141
在C中,NAN声明为<math.h>.
在C++中,std::numeric_limits<double>::quiet_NaN()声明为<limits>.
但是,为了检查值是否为NaN,您无法将其与另一个NaN值进行比较.而是使用isnan()来自<math.h>于C,或std::isnan()从<cmath>C++中.
Sha*_*our 22
正如其他人指出你正在寻找,std::numeric_limits<double>::quiet_NaN()虽然我不得不说我更喜欢cppreference.com文件.特别是因为这句话有点模糊:
只有在std :: numeric_limits :: has_quiet_NaN == true时才有意义.
并且很容易弄清楚这在网站上意味着什么,如果你检查它们的部分std::numeric_limits::has_quiet_NaN说:
此常量对所有浮点类型都有意义,如果std :: numeric_limits :: is_iec559 == true,则保证为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.
Run Code Online (Sandbox Code Playgroud)
在 C 中是否可以将 NaN 分配给 double 或 float ...?
是的,从C99开始,(C++11)<math.h>提供了以下功能:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
Run Code Online (Sandbox Code Playgroud)
这就像他们的strtod("NAN(n-char-sequence)",0)对手和NAN任务。
// 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);
Run Code Online (Sandbox Code Playgroud)
示例输出:(取决于实现)
(7ff8000000012345)
(fff000000006789a)
(7ff8000000000000)
Run Code Online (Sandbox Code Playgroud)
...检查变量是否是数字。
使用isnan(), std::isnan()来自<math.h>, <cmath>.
| 归档时间: |
|
| 查看次数: |
81866 次 |
| 最近记录: |