C++官方参考链接:https://cplusplus.com/reference/cfenv/fesetround/
函数
fesetround
int fesetround (int rdir);
设置舍入方向模式
将rdir设置为浮点环境的当前舍入方向模式。
调用此函数的程序应确保为调用启用pragma FENV_ACCESS。
形参
rdir
定义为舍入方向模式的值之一:
| macro value(宏值) | description(描述) |
|---|---|
| FE_DOWNWARD | Round downward.(向下舍入。) |
| FE_TONEAREST | Round to nearest.(向最近舍入) |
| FE_TOWARDZERO | Round toward zero.(向零舍入。) |
| FE_UPWARD | Round upward.(向上舍入。) |
某些库实现可能支持额外的浮点舍入方向值(其对应的宏也以FE_开头)。
C99
库可以在
C++11
至少上述所有宏值都在
如果传入的不是这些宏定义的int值,函数不会改变舍入方向模式,并返回一个非0值。
返回值
如果成功设置了请求的舍入方向,则为0。否则,为非0值。
用例
/* fesetround example */
#include
#include
#include
#pragma STDC FENV_ACCESS on
int main ()
{
printf ("rounding -3.8:\n");
fesetround(FE_DOWNWARD);
printf ("FE_DOWNWARD: %.1f\n", rint(-3.8));
fesetround(FE_TONEAREST);
printf ("FE_TONEAREST: %.1f\n", rint(-3.8));
fesetround(FE_TOWARDZERO);
printf ("FE_TOWARDZERO: %.1f\n", rint(-3.8));
fesetround(FE_UPWARD);
printf ("FE_UPWARD: %.1f\n", rint(-3.8));
return 0;
}
可能的输出:

数据竞争
每个线程都维护一个具有自己状态的独立浮点环境。生成一个新线程会复制当前状态。【这适用于C11和C++11实现】
异常
无抛出保证:此函数从不抛出异常。