当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ feupdateenv()用法及代码示例


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 <bits/stdc++.h> 
#pragma STDC FENV_ACCESS on 
  
// Function to use the fucntion 
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 succes 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 <bits/stdc++.h> 
#pragma STDC FENV_ACCESS on 
  
// Function to use the fucntion 
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 succes 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


相关用法


注:本文由纯净天空筛选整理自AmanSrivastava1大神的英文原创作品 feupdateenv() function in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。