FE_DFL_ENV
在头文件<fenv.h>中定义 | | |
---|---|---|
#define FE_DFL_ENV / *实现定义* / | | (自C99以来) |
宏常量FE_DFL_ENV扩展为类型const fenv_t *的表达式,该表达式指向默认浮点环境的完整副本,即在程序启动时加载的环境。
其他以FE_开头,后跟大写字母并且类型为const fenv_t *的宏可以由实现支持。
例
#include <stdio.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
printf("current exceptions raised: ");
if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO");
if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT");
if(fetestexcept(FE_INVALID)) printf(" FE_INVALID");
if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW");
if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW");
if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none");
printf("\n");
}
void show_fe_rounding_method(void)
{
printf("current rounding method: ");
switch (fegetround()) {
case FE_TONEAREST: printf ("FE_TONEAREST"); break;
case FE_DOWNWARD: printf ("FE_DOWNWARD"); break;
case FE_UPWARD: printf ("FE_UPWARD"); break;
case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break;
default: printf ("unknown");
};
printf("\n");
}
void show_fe_environment(void)
{
show_fe_exceptions();
show_fe_rounding_method();
}
int main()
{
printf("On startup:\n");
show_fe_environment();
// Change environment
fesetround(FE_DOWNWARD); // change rounding mode
feraiseexcept(FE_INVALID); // raise exception
printf("\nBefore restoration:\n");
show_fe_environment();
fesetenv(FE_DFL_ENV); // restore
printf("\nAfter restoring default environment:\n");
show_fe_environment();
}
输出:
On startup:
current exceptions raised: none
current rounding method: FE_TONEAREST
Before restoration:
current exceptions raised: FE_INVALID
current rounding method: FE_DOWNWARD
After restoring default environment:
current exceptions raised: none
current rounding method: FE_TONEAREST
参考
- C11标准(ISO / IEC 9899:2011):
- 7.6 / 9浮点环境<fenv.h>(p:208)
- C99标准(ISO / IEC 9899:1999):
- 7.6 / 8浮点环境<fenv.h>(p:188-189)
扩展内容
fegetenvfesetenv(C99) | 保存或恢复当前的浮点环境(功能) |
---|---|
feupdateenv(C99) | 恢复浮点环境并引发以前引发的异常(函数) |
| FE_DFL_ENV的C ++文档 |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com