C ++ fesetexceptflag () - Biblioteca standard C ++

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.
Bitmask a acceptat macrocomenzi
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

Articole interesante...