La funzione fegetexceptflag () in C ++ ottiene i flag di eccezione in virgola mobile specificati dall'argomento tranne, e li memorizza nel punto specificato da flagp.
La funzione fetgetexceptflag () è definita nel file di intestazione.
prototipo fegetexceptflag ()
int fegetexceptflag (fexcept_t * flagp, int tranne);
L'argomento tranne può essere un OR bit per bit delle macro delle eccezioni a virgola mobile.
Parametri fegetexceptflag ()
- flagp: un puntatore a un oggetto fexcept_t in cui verranno memorizzati i flag.
- tranne: elenco maschera di bit dei flag di eccezione da ottenere.
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 |
fegetexceptflag () Restituisce il valore
- La funzione fegetexceptflag () restituisce zero in caso di successo, diversamente da zero.
Esempio: come funziona la funzione fegetexceptflag ()?
#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