函数
<cfenv>

fegetround

int fegetround (void);
获取舍入方向模式
返回一个值,该值指示当前*浮点环境*中指定的舍入方向模式。

此函数返回的值是否与<cfloat>中的FLT_ROUNDS相同是未指定的。

参数



返回值

如果函数成功确定了当前舍入模式,并且该模式受实现支持,则函数将返回一个具有对应宏定义的值
宏值描述
FE_DOWNWARD向下舍入。
FE_TONEAREST舍入到最近的值。
FE_TOWARDZERO向零舍入。
FE_UPWARD向上舍入。
某些库实现可能支持额外的*浮点舍入方向*值(其对应宏也以FE_开头)。
库可能仅在 <fenv.h> 中定义它们支持的上述宏值(其他宏可能未定义)。
<cfenv> 中至少定义了所有上述宏值。

示例

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

int main ()
{
  printf ("rounding using ");
  switch (fegetround()) {
    case FE_DOWNWARD: printf ("downward"); break;
    case FE_TONEAREST: printf ("to-nearest"); break;
    case FE_TOWARDZERO: printf ("toward-zero"); break;
    case FE_UPWARD: printf ("upward"); break;
    default: printf ("unknown");
  }
  printf (" rounding:\n");

  printf ( "rint (2.3) = %.1f\n", rint(2.3) );
  printf ( "rint (3.8) = %.1f\n", rint(3.8) );
  printf ( "rint (-2.3) = %.1f\n", rint(-2.3) );
  printf ( "rint (-3.8) = %.1f\n", rint(-3.8) );
  return 0;
}

可能的输出

Rounding using to-nearest rounding:
rint (2.3) = 2.0
rint (3.8) = 4.0
rint (-2.3) = -2.0
rint (-3.8) = -4.0


数据竞争

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

异常

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

另见