C++中的feupdateenv()函数首先保存当前引发的浮点异常。它从给定的fenv_t对象恢复浮点环境,然后引发先前保存的异常。
句法:
int feupdateenv( fenv_t* envp )
参数:它接受单个强制性参数envp ,该参数指定指向fenv_t对象的指针,该指针由先前对feholdexcept或fegetenv的调用设置或等于FE_DFL_ENV 。该函数还接受类型为fenv_t的指针作为其参数,该指针保存先前通过使用feholdexcept或fegetenv设置的浮点环境,并将该浮点环境与当前环境一起还原。
返回值:该函数返回以下两种值:
- 成功返回零
- 失败时返回非零值
下面的程序说明了上述函数。
程序1:
// C++ program to illustrate the
// feupdateenv() function
#include
#pragma STDC FENV_ACCESS on
// Function to use the function
double answer(double y)
{
// struct defined
fenv_t trial;
// use the function feholdexcept
feholdexcept(&trial);
// find log valye
y = log(y);
// clears exception
feclearexcept(FE_OVERFLOW | FE_DIVBYZERO);
// call the function for success or not
feupdateenv(&trial);
return y;
}
int main()
{
// It is a combination of all of
// the possible floating-point exception
feclearexcept(FE_ALL_EXCEPT);
// it returns the log value
// if it is to be found
printf("log(0.0): %f\n", answer(0.0));
// the function does not throws any exception
if (!fetestexcept(FE_ALL_EXCEPT)) {
printf("no exceptions raised");
}
return 0;
}
输出:
log(0.0): -inf
no exceptions raised
程式2:
// C++ program to illustrate the
// feupdateenv() function
#include
#pragma STDC FENV_ACCESS on
// Function to use the function
double answer(double y)
{
// struct defined
fenv_t trial;
// use the function feholdexcept
feholdexcept(&trial);
// find log valye
y = log(y);
// clears exception
feclearexcept(FE_OVERFLOW | FE_DIVBYZERO);
// call the function for success or not
feupdateenv(&trial);
return y;
}
int main()
{
// It is a combination of all of
// the possible floating-point exception
feclearexcept(FE_ALL_EXCEPT);
// it returns the log value
// if it is to be found
printf("log(10.0): %f\n", answer(10.0));
// the function does not throws any exception
if (!fetestexcept(FE_ALL_EXCEPT)) {
printf("no exceptions raised");
}
else
printf("exceptions raised");
return 0;
}
输出:
log(10.0): 2.302585
exceptions raised
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。