Namensräume
Varianten
Aktionen

feupdateenv

Von cppreference.com
< c‎ | numeric‎ | fenv
Definiert in der Headerdatei <fenv.h>
int feupdateenv( const fenv_t* envp );
(seit C99)

Zuerst werden die aktuell ausgelösten Gleitkommaausnahmen gespeichert, dann wird die Gleitkommaumgebung aus dem Objekt, auf das envp zeigt, wiederhergestellt (ähnlich wie bei fesetenv), und dann werden die gespeicherten Gleitkommaausnahmen ausgelöst.

Diese Funktion kann verwendet werden, um den durch einen früheren Aufruf von feholdexcept etablierten Non-Stop-Modus zu beenden.

Inhalt

[bearbeiten] Parameter

envp - Zeiger auf das Objekt vom Typ fenv_t, das durch einen früheren Aufruf von feholdexcept oder fegetenv gesetzt wurde, oder das gleich FE_DFL_ENV ist

[bearbeiten] Rückgabewert

0 bei Erfolg, andernfalls ungleich Null.

[bearbeiten] Beispiel

#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)   /* times two */
{
    fenv_t curr_excepts;
 
    /* Save and clear current f-p environment. */
    feholdexcept(&curr_excepts);
 
    /* Raise inexact and overflow exceptions. */
    printf("In x2():  x = %f\n", x=x*2.0);
    show_fe_exceptions();
    feclearexcept(FE_INEXACT);   /* hide inexact exception from caller */
 
    /* Merge caller's exceptions (FE_INVALID)        */
    /* with remaining x2's exceptions (FE_OVERFLOW). */
    feupdateenv(&curr_excepts);
    return x;
}
 
int main(void)
{    
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_INVALID);   /* some computation with invalid argument */
    show_fe_exceptions();
    printf("x2(DBL_MAX) = %f\n", x2(DBL_MAX));
    show_fe_exceptions();
 
    return 0;
}

Ausgabe

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

[bearbeiten] Referenzen

  • C11-Standard (ISO/IEC 9899:2011)
  • 7.6.4.4 Die Funktion feupdateenv (S. 214-215)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.6.4.4 Die Funktion feupdateenv (S. 195-196)

[bearbeiten] Siehe auch

speichert die Umgebung, löscht alle Statusflags und ignoriert alle zukünftigen Fehler
(function) [edit]
speichert oder stellt die aktuelle Gleitkomma-Umgebung wieder her
(function) [edit]
Standard-Gleitkomma-Umgebung
(macro constant) [edit]
C++ Dokumentation für feupdateenv