FE_DFL_ENV
FE_DFL_ENV
在头文件 | | |
---|---|---|
#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):
扩展内容
fegetenvfesetenv(C99) | 保存或恢复当前的浮点环境(功能) |
---|---|
feupdateenv(C99) | 恢复浮点环境并引发以前引发的异常(函数) |
| FE_DFL_ENV的C ++文档 |