Funcția fegetexceptflag () din C ++ primește stegulețe de excepție în virgulă mobilă, specificând argumentul excepție și îl stochează în punctul specificat de flagp.
Funcția fetgetexceptflag () este definită în fișierul antet.
fegetexceptflag () prototip
int fegetexceptflag (fexcept_t * flagp, int exceptează);
Argumentul cu excepția poate fi OR în sensul bitului al macro-urilor de excepție în virgulă mobilă.
fegetexceptflag () Parametri
- flagp: un pointer către un obiect fexcept_t în care vor fi stocate steagurile.
- excepts: listarea Bitmask a steagurilor de excepție de obținut.
Macro | Tip | Descriere |
---|---|---|
FE_DIVBYZERO | Eroare polară | Impartirea cu zero |
FE_INEXACT | Inexact | Nu sunt rezultate exacte, cum ar fi (1.0 / 3.0) |
FE_INVALID | Eroare de domeniu | Cel puțin un argument utilizat este o valoare pentru care funcția nu este definită |
FE_OVERFLOW | Eroare de depășire | Rezultatul este prea mare ca mărime pentru a fi reprezentat de tipul returnat |
FE_UNDERFLOW | Eroare de subdezvoltare | Rezultatul este prea mic ca mărime pentru a fi reprezentat de tipul returnat |
FE_ALL_EXCEPT | Toate excepțiile | Toate excepțiile acceptate de implementare |
fegetexceptflag () Valoare returnată
- Funcția fegetexceptflag () returnează zero la succes, altfel altul decât zero.
Exemplu: Cum funcționează funcția 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; )
Când rulați programul, ieșirea va fi:
Excepții crescute: FE_DIVBYZERO Excepții crescute: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Excepții crescute: FE_DIVBYZERO