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

DEC_NAN宏


概要:
#include <float.h>
#define DEC_NAN value	//value值由实现定义。

描述:

如果实现支持十进制浮点类型(即实现定义了宏__STDC_IEC_60559_DFP__。),宏DEC_NAN才会被定义。

该宏表示_Decimal32类型的安静非数值(quiet NaN)。该宏会展开为_Decimal32类型的常量表达式,表示安静非数值。

(注:ISO/IEC 9899:2024标准中,宏DEC_NAN在<float.h>头文件及<math.h>头文件中均有定义。根据ISO/IEC 9899:2024标准,使用<math.h>头文件中的宏DEC_NAN是一种过时做法。)


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
/*宏DEC_NAN范例*/

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

int main(void)
{
    #ifdef __STDC_IEC_60559_DFP__
        #ifdef DEC_NAN
            _Decimal32 value = DEC_NAN;
            size_t size = sizeof(_Decimal32);
            unsigned char arr[size];
            memcpy(arr, &value, size);
            
            //验证赋值后value值是否是非数值。
            if(isnan(value) == 0)
            {
                puts("Warning: DEC_NAN does not produce a NaN value!");
            }

            //_Decimal32类型对象十六进制表示形式。
            printf("Hexadecimal representation of DEC_NAN: 0X");
            for(size_t i=0; i<size; i++)
            {
                printf("%02X", arr[size-1-i]);
            }
            printf("\n");
        #else
            puts("The implementation does not define macro DEC_NAN.");
        #endif
    #else
        puts("The implementation does not support decimal floating types.");
    #endif

    return 0;
}


输出:

The implementation does not support decimal floating types.

(注:编译时实现还未支持十进制浮点类型。)


相关内容:
NAN 表示安静非数值的宏


主要参考资料:

1、ISO/IEC 9899:2024