在头文件cfenv.h中指定了C /C++中的fegetenv()函数,并尝试将浮点环境的当前状态存储在envp指向的对象中。浮点环境是一组状态标志和控制模式,包括浮点异常和舍入方向模式。
用法:
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 -> \n";
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 -> \n";
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 -> \n";
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 -> \n";
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
相关用法
- C++ log()用法及代码示例
- C++ div()用法及代码示例
- C++ fma()用法及代码示例
- C++ wcsncpy()用法及代码示例
- C语言 tolower()用法及代码示例
- C++ wmemmove()用法及代码示例
- C语言 strlwr()用法及代码示例
- C++ map key_comp()用法及代码示例
- C++ wcstok()用法及代码示例
- C++ wcsstr()用法及代码示例
注:本文由纯净天空筛选整理自AmanSrivastava1大神的英文原创作品 fegetenv() function in C/C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。