当前位置: C语言 -- 标准库 -- <math.h> -- issignaling

issignaling宏


概要:
#include <math.h>
int issignaling(real-floating x);

描述:

该宏是函数式宏(function-like macro),判断参数x是否为信号非数值(signaling NaN)。

即使实参x是信号非数值,宏issignaling也不会引发浮点异常。


参数:
real-floating x

参数x应为实数浮点类型表达式,例如:float、double、long double类型表达式。


返回值:

如果实参x为信号非数值,该宏返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
/*宏issignaling范例*/

#include <float.h>
#include <math.h>
#include <stdio.h>

int main(void)
{
    #if defined(DBL_SNAN) && (__STDC_VERSION_MATH_H__ >= 202311L)
      double q_nan = 0.0/0.0;
      printf("issignaling(DBL_SNAN): %d\n", issignaling(DBL_SNAN));
      printf("issignaling(NAN): %d\n", issignaling(NAN));
      printf("issignaling(0.0/0.0): %d\n", issignaling(q_nan));
    #else
      puts("The implementation may not define macro DBL_SNAN.");
    #endif

    return 0;
}

输出:

The implementation may not support issignaling.

表达式0.0/0.0运算结果是安静非数值;宏DBL_SNAN表示double类型的信号非数值;宏NAN表示float类型的安静非数值。


相关内容:
fpclassify 对参数按浮点类别进行分类的宏。
isfinite 判断参数是否为有限值的宏。
isinf 判断参数是否为无穷大的宏。
isnormal 判断参数是否为规格化数的宏。
isnan 判断参数是否为非数值的宏。
issubnormal 判断参数是否为次规格化数的宏。
iszero 判断参数是否为0的宏。


主要参考资料:

1、ISO/IEC 9899:2024