C ++ fesetexceptflag () - Libreria standard C ++

La funzione fesetexceptflag () in C ++ imposta i flag di eccezione a virgola mobile specificati da un oggetto puntatore nell'ambiente a virgola mobile.

La funzione fesetexceptflag () è definita nel file di intestazione.

prototipo fesetexceptflag ()

 int fesetexceptflag (const fexcept_t * flagp, int tranne);

La funzione fesetexceptflag () tenta di copiare tutto il contenuto dei flag di eccezione a virgola mobile specificati da tranne da flagp nell'ambiente a virgola mobile.

Questa funzione modifica solo i flag e non solleva eccezioni.

Parametri fesetexceptflag ()

  • flagp: un puntatore a un oggetto fexcept_t da cui verranno letti i flag.
  • tranne: elenco maschera di bit dei flag di eccezione da impostare.
Bitmask ha accettato le macro
Macro genere Descrizione
FE_DIVBYZERO Errore di polo Divisione per zero
FE_INEXACT Inesatto Risultati non esatti come (1.0 / 3.0)
FE_INVALID Errore di dominio Almeno un argomento utilizzato è un valore per il quale la funzione non è definita
FE_OVERFLOW Errore di intervallo di overflow Il risultato è di grandezza troppo grande per essere rappresentato dal tipo restituito
FE_UNDERFLOW Errore di intervallo di underflow Il risultato è di grandezza troppo piccolo per essere rappresentato dal tipo restituito
FE_ALL_EXCEPT Tutte le eccezioni Tutte le eccezioni supportate dall'implementazione

fesetexceptflag () Restituisce il valore

  • La funzione fesetexceptflag () restituisce zero in caso di successo, altrimenti diverso da zero.

Esempio: come funziona la funzione fesetexceptflag ()?

 #include #include #pragma STDC FENV_ACCESS ON using namespace std; void print_exceptions() ( cout << "Raised exceptions: "; if(fetestexcept(FE_ALL_EXCEPT)) ( if(fetestexcept(FE_DIVBYZERO)) cout << "FE_DIVBYZERO "; if(fetestexcept(FE_INEXACT)) cout << "FE_INEXACT "; if(fetestexcept(FE_INVALID)) cout << "FE_INVALID "; if(fetestexcept(FE_OVERFLOW)) cout << "FE_OVERFLOW "; if(fetestexcept(FE_UNDERFLOW)) cout << "FE_UNDERFLOW "; ) else cout << "None"; cout << endl; ) int main() ( fexcept_t excepts; feraiseexcept(FE_DIVBYZERO); /* save current state*/ fegetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); feraiseexcept(FE_INVALID|FE_OVERFLOW); print_exceptions(); /* restoring previous exceptions */ fesetexceptflag(&excepts,FE_ALL_EXCEPT); print_exceptions(); return 0; )

Quando esegui il programma, l'output sarà:

 Eccezioni sollevate: FE_DIVBYZERO Eccezioni sollevate: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Eccezioni sollevate: FE_DIVBYZERO

Articoli interessanti...