📜  C++中的feupdateenv()函数

📅  最后修改于: 2021-05-25 19:57:36             🧑  作者: Mango

C++中的feupdateenv()函数首先保存当前引发的浮点异常。它从给定的fenv_t对象恢复浮点环境,然后引发先前保存的异常。

句法:

int feupdateenv( fenv_t* envp )

参数:它接受单个强制性参数envp ,该参数指定指向fenv_t对象的指针,该指针由先前对feholdexceptfegetenv的调用设置或等于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等的更多准备工作,请参阅“完整面试准备课程”