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

DEC_EVAL_METHOD宏


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

描述:

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

宏DEC_EVAL_METHOD表示十进制浮点类型的评估方法,类似于宏FLT_EVAL_METHOD。C语言允许在表达式求值过程中使用更高精度的中间格式,以提高计算的准确性,但最终会舍入到目标类型的格式。DEC_EVAL_METHOD用于指示编译器实际采用的中间精度策略。

除赋值和强制类型转换外(赋值和强制类型转换会删除所有额外的范围和精度。),由浮点运算生成的值(包括操作数隐式转换生成值。)以及浮点常量值,均按评估格式进行评估,该格式的范围和精度可能大于类型要求。此类格式称为评估格式(evaluation format)。具体实现中使用的评估格式由宏DEC_EVAL_METHOD的实现定义值决定。


宏DEC_EVAL_METHOD的可能值:

-1

评估格式不明确。

0

根据类型的范围和精度评估所有操作和常量。

1

根据_Decimal64类型的范围和精度评估所有_Decimal32类型和_Decimal64类型的操作和常量;根据_Decimal128类型的范围和精度评估所有_Decimal128类型的操作和常量。

2

根据_Decimal128类型的范围和精度评估所有操作和常量。

(注:所用评估格式涉及所有浮点类型,而不仅仅是实数类型,例如:如果宏DEC_EVAL_METHOD值为1,两个_Decimal32 _Complex类型操作数的积使用_Decimal64 _Complex表示,其实数部分和虚数部分均被评估为_Decimal64类型。)

如果宏DEC_EVAL_METHOD存在其它负值,将由实现定义评估格式。宏DEC_EVAL_METHOD值不适合用于描述函数调用的返回值。


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

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

int main(void)
{
    #ifdef __STDC_IEC_60559_DFP__
        #ifdef DEC_EVAL_METHOD
            printf("DEC_EVAL_METHOD = %d\n", DEC_EVAL_METHOD);
        #else
            puts("The implementation does not define macro DEC_EVAL_METHOD.");
        #endif
    #else
        puts("The implementation does not support decimal floating types.");
    #endif

    return 0;
}


输出:

The implementation does not support decimal floating types.

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


相关内容:
FLT_EVAL_METHOD 表示评估方法的宏。


主要参考资料:

1、ISO/IEC 9899:2024