función feupdateenv() en C++

La función feupdateenv() en C++ primero guarda las excepciones de punto flotante generadas actualmente. Restaura el entorno de punto flotante del objeto fenv_t dado y luego genera las excepciones que se guardaron previamente.
Sintaxis: 
 

int feupdateenv( fenv_t* envp )

Parámetros: acepta un solo parámetro obligatorio envp que especifica el puntero al objeto fenv_t que se establece mediante una llamada anterior a feholdexcept o fegetenv o es igual a FE_DFL_ENV . La función también acepta un puntero de tipo fenv_t como argumento que contiene un entorno de coma flotante establecido previamente mediante feholdexcept o fegetenv y restaura ese entorno de coma flotante junto con el entorno actual.
Valor devuelto: la función devuelve dos tipos de valor que se describen a continuación: 
 

  • Devuelve cero en caso de éxito.
  • Devuelve un valor distinto de cero en caso de falla

Los siguientes programas ilustran la función anterior.
Programa 1: 
 

CPP

// C++ program to illustrate the
// feupdateenv() function
#include <bits/stdc++.h>
#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 value
    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;
}

Producción: 
 

log(0.0): -inf
no exceptions raised

Programa 2: 
 

CPP

// C++ program to illustrate the
// feupdateenv() function
#include <bits/stdc++.h>
#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 value
    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;
}

Producción: 
 

log(10.0): 2.302585
exceptions raised

Publicación traducida automáticamente

Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *