C
数值 | Numerics

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 ++文档 |