C++官方参考链接:https://cplusplus.com/reference/cfenv/fegetround/
函数
fegetround
int fegetround (void);
获取舍入方向模式
返回一个值,该值指示舍入方向模式,如当前浮点环境中指定的那样。
此函数返回的值是否与
形参
没有形参。
返回值
如果函数成功确定了当前舍入模式,并且实现支持该模式,则函数返回一个为其定义了相应宏的值:
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
至少上述所有宏值都在
用例
/* fegetround / rint example */
#include
#include
#include
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;
}
可能的输出:
数据竞争
每个线程都维护一个具有自己状态的独立浮点环境。生成一个新线程会复制当前状态。【这适用于C11和C++11实现】
异常
无抛出保证:此函数从不抛出异常。