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

fe_dec_setround函数


概要:
#include <fenv.h>
#ifdef __STDC_IEC_60559_DFP__
  int fe_dec_setround(int rnd);
#endif

描述:

该函数将十进制浮点操作的动态舍入模式设置为参数rnd表示的舍入模式。

如果参数rnd不等于表示十进制浮点操作舍入模式的宏值,浮点环境的舍入模式保持不变。

如果FLT_RADIX不等于10,fesetround函数更改的舍入方向和fe_dec_setround函数更改的舍入方向是相互独立的;如果FLT_RADIX等于10,fesetround函数和fe_dec_setround函数是否会同时更改标准浮点操作和十进制浮点操作的舍入方向将由实现定义。


参数:
int rnd

参数应为定义的表示十进制浮点操作舍入模式的宏值之一。


返回值:

如果参数rnd指定的动态舍入模式设置成功,函数返回0;否则函数返回非0值。


范例:
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 
/*函数fe_dec_setround范例*/

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

#pragma STDC FENV_ACCESS ON

int main(void)
{
    #ifdef __STDC_IEC_60559_DFP__
      #ifdef FE_DEC_DOWNWARD
        fe_dec_setround(FE_DEC_DOWNWARD);
        puts("Current rounding direction for decimal floating types: FE_DEC_DOWNWARD");
        printf("nearbyintd64(2.55dd) = %Df\n",nearbyintd64(2.55dd));
        printf("nearbyintd64(2.35dd) = %Df\n",nearbyintd64(2.35dd));
        printf("nearbyintd64(-2.55dd) = %Df\n",nearbyintd64(-2.55dd));
        printf("nearbyintd64(-2.35dd) = %Df\n",nearbyintd64(-2.35dd));
      #else
        puts("The implementation does not define macro FE_DEC_DOWNWARD.");
      #endif
    #else
      puts("The implementation does not support decimal floating types.");
    #endif

    return 0;
}


可能输出:

Current rounding direction for decimal floating types: FE_DEC_DOWNWARD

nearbyintd64(2.55dd) = 2.000000

nearbyintd64(2.35dd) = 2.000000

nearbyintd64(-2.55dd) = -3.000000

nearbyintd64(-2.35dd) = -3.000000

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


相关内容:
fesetround 设置舍入模式的函数。
fegetround 获取舍入模式的函数。
fe_dec_getround 获取十进制浮点操作舍入模式的函数。
fesetmode 设置动态浮点控制模式的函数。
fegetmode 获取动态浮点控制模式的函数。


主要参考资料:

1、ISO/IEC 9899:2024

2、IEEE 754:2019