Funcția fesetexceptflag () din C ++ setează steaguri de excepție în virgulă mobilă specificate de la un obiect pointer în mediul în virgulă mobilă.
Funcția fesetexceptflag () este definită în fișierul antet.
fesetexceptflag () prototip
int fesetexceptflag (const fexcept_t * flagp, int exceptează);
Funcția fesetexceptflag () încearcă să copieze tot conținutul semnalizărilor de excepție în virgulă mobilă specificate de excepțiile din flag în mediul în virgulă mobilă.
Această funcție modifică doar semnalizatoarele și nu ridică excepții.
fesetexceptflag () Parametri
- flagp: Un indicator către un obiect fexcept_t de unde vor fi citite steagurile.
- excepts: listarea Bitmask a steagurilor de excepție de setat.
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 |
fesetexceptflag () Valoare returnată
- Funcția fesetexceptflag () returnează zero la succes, altfel altul decât zero.
Exemplu: Cum funcționează funcția 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; )
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