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

fesetmode函数


概要:
#include <fenv.h>
int fesetmode(const femode_t *modep);

描述:

该函数尝试建立由参数modep指向对象表示的动态浮点模式。

参数modep指向对象应通过调用fegetmode函数设置,或者等于宏FE_DFL_MODE,或者等于实现定义的动态浮点模式状态宏。

fegetround函数和fesetround函数用于控制浮点舍入模式。fegetmode函数和fesetmode函数用于管理实现中所有动态浮点控制模式。


参数:
const femode_t *modep

参数为指向const femode_t类型对象的指针。


返回值:

如果参数modep指向对象表示的动态浮点模式设置成功,函数返回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 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
/*函数fesetmode范例*/

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

#pragma STDC FENV_ACCESS ON

//指定舍入模式下浮点数舍入为浮点格式表示整数值。
void func(double value, int feround)
{
    femode_t femode;

    //保存当前动态浮点控制模式。
    if(fegetmode(&femode) != 0)
    {
        printf("The modes were not successfully stored.\n");
        exit(EXIT_FAILURE);
    }

    //设置当前舍入模式。
    fesetround(feround);

    printf("nearbyint(%.2f) = %f\n", value, nearbyint(value));

    //恢复函数调用时动态浮点控制模式。
    if(fesetmode(&femode) != 0)
    {
        printf("The modes were not successfully established.\n");
        exit(EXIT_FAILURE);
    }
}

int main(void)
{
    func(2.35, FE_UPWARD);
    func(2.35, FE_DOWNWARD);

    return 0;
}


可能输出:

nearbyint(2.35) = 3.000000

nearbyint(2.35) = 2.000000

(注:编译时实现还未支持femode_t类型、fegetmode函数以及fesetmode函数。)


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


主要参考资料:

1、ISO/IEC 9899:2024

2、IEEE 754:2019