函数
<cfenv>

fesetround

int fesetround (int rdir);
设置舍入方向模式
rdir 设置为浮点环境的当前舍入方向模式

调用此函数的程序应确保在调用时启用了 pragma FENV_ACCESS

参数

rdir
定义为舍入方向模式的值之一
宏值描述
FE_DOWNWARD向下舍入。
FE_TONEAREST舍入到最近的值。
FE_TOWARDZERO向零舍入。
FE_UPWARD向上舍入。
某些库实现可能支持额外的浮点舍入方向值(其对应的宏也以 FE_ 开头)。
库可能仅在 <fenv.h> 中定义它们支持的上述宏值(其他宏可能未定义)。
<cfenv> 中至少定义了所有上述宏值。
如果传递了这些宏定义之外的 int 值,则该函数不会更改舍入方向模式并返回一个非零值。

返回值

如果请求的舍入方向设置成功,则返回零。
否则,返回一个非零值。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* fesetround example */
#include <stdio.h>      /* printf */
#include <fenv.h>       /* fesetround, FE_* */
#include <math.h>       /* rint */
#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;
}

可能的输出

rounding -3.8:
FE_DOWNWARD: -4.0
FE_TONEAREST: -4.0
FE_TOWARDZERO: -3.0
FE_UPWARD: -3.0


数据竞争

每个线程维护一个独立的浮点环境及其自身的状态。生成一个新线程会复制当前状态。[此规定适用于 C11 和 C++11 实现]

异常

无异常保证:此函数从不抛出异常。

另见