Namespaces
Variants

feupdateenv

From cppreference.net
< c ‎ | numeric ‎ | fenv
Défini dans l'en-tête <fenv.h>
int feupdateenv ( const fenv_t * envp ) ;
(depuis C99)

D'abord, mémorise les exceptions en virgule flottante actuellement levées, puis restaure l'environnement de virgule flottante à partir de l'objet pointé par envp (similaire à fesetenv ), puis lève les exceptions en virgule flottante qui avaient été sauvegardées.

Cette fonction peut être utilisée pour mettre fin au mode non-stop établi par un appel antérieur à feholdexcept .

Table des matières

Paramètres

envp - pointeur vers l'objet de type fenv_t défini par un appel antérieur à feholdexcept ou fegetenv ou égal à FE_DFL_ENV

Valeur de retour

0 en cas de succès, non nul sinon.

Exemple

#include <stdio.h>
#include <fenv.h>
#include <float.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
    printf("current exceptions raised: ");
    if(fetestexcept(FE_DIVBYZERO))     printf(" FE_DIVBYZERO");
    if(fetestexcept(FE_INEXACT))       printf(" FE_INEXACT");
    if(fetestexcept(FE_INVALID))       printf(" FE_INVALID");
    if(fetestexcept(FE_OVERFLOW))      printf(" FE_OVERFLOW");
    if(fetestexcept(FE_UNDERFLOW))     printf(" FE_UNDERFLOW");
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(" none");
    printf("\n");
}
double x2 (double x)   /* fois deux */
{
    fenv_t curr_excepts;
    /* Sauvegarder et effacer l'environnement flottant actuel. */
    feholdexcept(&curr_excepts);
    /* Lever les exceptions inexacte et dépassement de capacité. */
    printf("In x2():  x = %f\n", x=x*2.0);
    show_fe_exceptions();
    feclearexcept(FE_INEXACT);   /* masquer l'exception inexacte de l'appelant */
    /* Fusionner les exceptions de l'appelant (FE_INVALID)        */
    /* avec les exceptions restantes de x2 (FE_OVERFLOW). */
    feupdateenv(&curr_excepts);
    return x;
}
int main(void)
{    
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_INVALID);   /* calcul avec argument invalide */
    show_fe_exceptions();
    printf("x2(DBL_MAX) = %f\n", x2(DBL_MAX));
    show_fe_exceptions();
    return 0;
}

Sortie :

current exceptions raised:  FE_INVALID
In x2():  x = inf
current exceptions raised:  FE_INEXACT FE_OVERFLOW
x2(DBL_MAX) = inf
current exceptions raised:  FE_INVALID FE_OVERFLOW

Références

  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.6.4.4 La fonction feupdateenv (p: 214-215)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.6.4.4 La fonction feupdateenv (p: 195-196)

Voir aussi

sauvegarde l'environnement, efface tous les indicateurs d'état et ignore toutes les erreurs futures
(fonction)
sauvegarde ou restaure l'environnement de virgule flottante actuel
(fonction)
environnement de virgule flottante par défaut
(constante de macro)
Documentation C++ pour feupdateenv