这个 fegetenv() C/C++中的函数在头文件中指定 cfenv。H 并尝试将浮点环境的当前状态存储在 envp .浮点环境是一组状态标志和控制模式,包括浮点异常和舍入方向模式。
null
语法:
int fegetenv( fenv_t* envp )
参数: 该函数接受一个强制参数 envp 它指定存储浮点环境状态的对象。
返回值: 该函数返回两个值,如下所示:
- 成功时,它返回零。
- 失败时,它返回非零。
以下程序说明了上述功能: 项目1:
// C++ program to illustrate // fegetenv() function #include <bits/stdc++.h> using namespace std; // rounding direction mode void rounding_mode() { cout << "Rounding mode is ->" ; switch (fegetround()) { case FE_TONEAREST: // Round to nearest cout << "FE_TONEAREST" << endl; break ; case FE_DOWNWARD: // Round downward cout << "FE_DOWNWARD" << endl; break ; case FE_UPWARD: // Round upward cout << "FE_UPWARD" << endl; break ; case FE_TOWARDZERO: // Round toward zero cout << "FE_TOWARDZERO" << endl; break ; default : cout << "unknown" << endl; }; } int main( void ) { fenv_t envp; // initial environment cout << "Initial environment :" << endl; // print the exception raised initially cout << "Exception raised -> " ; if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO " << endl; if (fetestexcept(FE_INEXACT)) cout << "FE_INEXACT " << endl; if (fetestexcept(FE_INVALID)) cout << "FE_INVALID " << endl; if (fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW " << endl; if (fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW " << endl; } else cout << "None" << endl; // print the rounding direction mode rounding_mode(); // Current environment fegetenv(&envp); feraiseexcept(FE_INVALID); // Set rounding direction mode fesetround(FE_DOWNWARD); // after environment is change cout << endl << "Final environment :" << endl; // print the exception raised cout << "Exception raised -> " ; if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO " << endl; if (fetestexcept(FE_INEXACT)) cout << "FE_INEXACT " << endl; if (fetestexcept(FE_INVALID)) cout << "FE_INVALID " << endl; if (fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW " << endl; if (fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW " << endl; } else cout << "None" << endl; // print the rounding direction mode rounding_mode(); return 0; } |
输出:
Initial environment : Exception raised -> None Rounding mode is ->FE_TONEAREST Final environment : Exception raised -> FE_INVALID Rounding mode is ->FE_DOWNWARD
项目2:
// C++ program to illustrate // fegetenv() function #include <bits/stdc++.h> using namespace std; // rounding direction mode void rounding_mode() { cout << "Rounding mode is ->" ; switch (fegetround()) { case FE_TONEAREST: // Round to nearest cout << "FE_TONEAREST" << endl; break ; case FE_DOWNWARD: // Round downward cout << "FE_DOWNWARD" << endl; break ; case FE_UPWARD: // Round upward cout << "FE_UPWARD" << endl; break ; case FE_TOWARDZERO: // Round toward zero cout << "FE_TOWARDZERO" << endl; break ; default : cout << "unknown" << endl; }; } int main( void ) { fenv_t envp; // initial environment cout << "Initial environment :" << endl; // print the exception raised initially cout << "Exception raised -> " ; if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO " << endl; if (fetestexcept(FE_INEXACT)) cout << "FE_INEXACT " << endl; if (fetestexcept(FE_INVALID)) cout << "FE_INVALID " << endl; if (fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW " << endl; if (fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW " << endl; } else cout << "None" << endl; // 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 cout << endl << "Final environment :" << endl; // print the exception raised cout << "Exception raised -> " ; if (fetestexcept(FE_ALL_EXCEPT)) { if (fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO " << endl; if (fetestexcept(FE_INEXACT)) cout << "FE_INEXACT " << endl; if (fetestexcept(FE_INVALID)) cout << "FE_INVALID " << endl; if (fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW " << endl; if (fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW " << endl; } else cout << "None" << endl; // 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
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END