- C 标准库
- C 库 - 首页
- C 库 - <assert.h>
- C 库 - <complex.h>
- C 库 - <ctype.h>
- C 库 - <errno.h>
- C 库 - <fenv.h>
- C 库 - <float.h>
- C 库 - <inttypes.h>
- C 库 - <iso646.h>
- C 库 - <limits.h>
- C 库 - <locale.h>
- C 库 - <math.h>
- C 库 - <setjmp.h>
- C 库 - <signal.h>
- C 库 - <stdalign.h>
- C 库 - <stdarg.h>
- C 库 - <stdbool.h>
- C 库 - <stddef.h>
- C 库 - <stdio.h>
- C 库 - <stdlib.h>
- C 库 - <string.h>
- C 库 - <tgmath.h>
- C 库 - <time.h>
- C 库 - <wctype.h>
- C 标准库资源
- C 库 - 快速指南
- C 库 - 有用资源
- C 库 - 讨论
C 库 - fegetenv() 函数
C 的fenv 库 fegetenv() 函数设置带小数的数字的控制流程。
假设我们正在处理一个数学问题,并且我们使用的是可以以不同方式进行数字舍入的计算器。但是,我们需要切换到具有不同舍入设置的不同计算器。因此,此函数就像保存第一个计算器的状态一样,我们可以稍后返回并继续使用与之前完全相同的设置。
语法
以下是 fegetenv() 函数的 C 库语法。
int fegetenv(fenv_t *envp);
参数
此函数只接受一个参数:
- fen_v - 该函数接收指向 fenv_t 对象的指针,当前环境将存储在此对象中。
返回值
此函数返回整数类型的返回值:
零,表示成功。
非零,表示无法获取环境。
示例 1
以下 C 库 fegetenv() 函数演示了保存和恢复浮点环境的任务。
#include <stdio.h> #include <fenv.h> int main() { fenv_t env; // Save the current floating-point environment fegetenv(&env); // Perform some floating-point operations here fesetenv(&env); // Restore the saved environment printf("Floating-point environment restored.\n"); return 0; }
输出
以上代码产生以下结果:
Floating-point environment restored.
示例 2
在此示例中,程序执行可能导致溢出的操作,恢复环境,并检查是否发生了溢出。
#include <fenv.h> #include <stdio.h> // rounding direction mode void rounding_mode() { printf("Rounding mode is ->"); switch (fegetround()) { case FE_TONEAREST: // Round to nearest printf("FE_TONEAREST\n"); break; case FE_DOWNWARD: // Round downward printf("FE_DOWNWARD\n"); break; case FE_UPWARD: // Round upward printf("FE_UPWARD\n"); break; case FE_TOWARDZERO: // Round toward zero printf("FE_TOWARDZERO\n"); break; default: printf("unknown\n"); }; } int main(void) { fenv_t envp; // initial environment printf("Initial environment :\n"); // print the exception raised initially printf("Exception raised -> \n"); if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) printf("FE_DIVBYZERO \n"); if (fetestexcept(FE_INEXACT)) printf("FE_INEXACT \n"); if (fetestexcept(FE_INVALID)) printf("FE_INVALID \n"); if (fetestexcept(FE_OVERFLOW)) printf("FE_OVERFLOW \n"); if (fetestexcept(FE_UNDERFLOW)) printf("FE_UNDERFLOW \n"); } else printf("None\n"); // print the rounding direction mode rounding_mode(); // Current environment fegetenv(&envp); feraiseexcept(FE_ALL_EXCEPT); // Set rounding direction mode fesetround(FE_DOWNWARD); // after environment is change printf("\nFinal environment :\n"); // print the exception raised printf("Exception raised -> \n"); if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) printf("FE_DIVBYZERO \n"); if (fetestexcept(FE_INEXACT)) printf("FE_INEXACT \n"); if (fetestexcept(FE_INVALID)) printf("FE_INVALID \n"); if (fetestexcept(FE_OVERFLOW)) printf("FE_OVERFLOW \n"); if (fetestexcept(FE_UNDERFLOW)) printf("FE_UNDERFLOW \n"); } else printf("None\n"); // print the rounding direction mode rounding_mode(); return 0; }
输出
执行以上代码后,我们得到以下结果:
Initial environment : Exception raised -> None Rounding mode is ->FE_TONEAREST Final environment : Exception raised -> FE_DIVBYZERO FE_INEXACT FE_INVALID FE_OVERFLOW FE_UNDERFLOW Rounding mode is ->FE_DOWNWARD
c_library_fenv_h.htm
广告