C/C++NaN常量(文字)
C/C++ NaN constant (literal)?
是否可以在C/C++中将NaN
分配给double
或float
?就像在JavaScript中一样:a = NaN
。因此,稍后您可以检查变量是数字还是数字。
在C中,NAN
在<math.h>
中声明。
在C++中,std::numeric_limits<double>::quiet_NaN()
是在<limits>
中声明的。
但是,为了检查一个值是否为NaN,您不能将其与另一个NaN值进行比较。而是使用C中<math.h>
中的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
上的部分,就会很容易弄清楚这在这个网站上意味着什么:
此常数对所有浮点类型都有意义,并且如果std::numeric_limits:is_iec559==true,则保证为true。
如果CCD_ 15表示您的平台支持CCD_。前一个线程解释了这在大多数情况下应该是正确的。
这可以使用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.
这是否可以将NaN分配给C…中的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);
其类似于用于分配的CCD_ 18对应物和CCD_。
// 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()
。
是的,通过指针的概念,您可以对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中对我有效。
- 常量函数,当其参数是对文字类型的引用时
- 为什么文字不是常量(字符串除外)?
- 模板接受常量,但不接受文字
- C++ 常量指向文字的指针有效吗?
- 为什么对字符串参数的常量引用可以采用字符串文字?
- 字符串文字可以传递给接受常量字符*的函数吗?
- 是否将常量字符*设置为等于字符[]文字安全
- 文字符号和字符串变量之间的串联然后返回常量字符*
- 字符串文字绑定到一个非常量字符指针
- 从文字字符串生成编译时常量整数
- 不以nul结尾的常量字符串文字
- Visual Studio 2015字符串文字并不总是常量
- 其中C++内存中的文字常量存储
- 为什么不允许我将函数返回 const char* 的结果分配给 char*,bt 可以将字符串文字(常量)分配给 cha
- 以前定义的常量,作为宏参数给出,被认为是字符串文字
- 我是否应该为代码中的重复文字定义常量
- 为什么字符常量/文字不能为空?
- 指针和文字常量
- 如何写出像"size_t s = 16 MByte"这样的文字常量?
- 无法在Matlab编码器中传递文字常量