如果出现错误,我有一个数值方法可以返回NaN或Inf,出于测试目的,我想临时强制它返回NaN或Inf,以确保正确处理这种情况.有没有一种可靠的、compiler-independent的方法来创建C语言中的NaN和inf的值?
在谷歌搜索了大约10分钟后,我只能找到依赖于编译器的解决方案.
如果出现错误,我有一个数值方法可以返回NaN或Inf,出于测试目的,我想临时强制它返回NaN或Inf,以确保正确处理这种情况.有没有一种可靠的、compiler-independent的方法来创建C语言中的NaN和inf的值?
在谷歌搜索了大约10分钟后,我只能找到依赖于编译器的解决方案.
您可以测试您的实现是否有:
#include <math.h>
#ifdef NAN
/* NAN is supported */
#endif
#ifdef INFINITY
/* INFINITY is supported */
#endif
C99(或至少是最新的草案)保证了INFINITY
的存在,并"扩展为浮点型的常量表达式,表示正或无符号"
NAN
可以定义,也可以不定义,"当且仅当实现支持浮点类型的安静NaN时才定义.它扩展为表示安静NaN的浮点类型的常量表达式."
请注意,如果要比较浮点值,请执行以下操作:
a = NAN;
即便如此,
a == NAN;
这是错误的.判断NaN的一种方法是:
#include <math.h>
if (isnan(a)) { ... }
你也可以做:a != a
来测试a
是否为NaN.
C99的math.h
中还有isfinite()
、isinf()
、isnormal()
和signbit()
个宏.
C99还有nan
种功能:
#include <math.h>
double nan(const char *tagp);
float nanf(const char *tagp);
long double nanl(const char *tagp);
(档号:N1256)