Funkcia fesetexceptflag () v C ++ nastavuje zadané príznaky výnimky s pohyblivou desatinnou čiarkou z objektu ukazovateľa do prostredia s plávajúcou desatinnou čiarkou.
Funkcia fesetexceptflag () je definovaná v hlavičkovom súbore.
prototyp fesetexceptflag ()
int fesetexceptflag (const fexcept_t * flagp, int okrem);
Funkcia fesetexceptflag () sa pokúša skopírovať všetok obsah príznakov výnimiek s pohyblivou desatinnou čiarkou špecifikovaných výnimkami z parametra flagp do prostredia s plávajúcou desatinnou čiarkou.
Táto funkcia iba upravuje príznaky a nevyvoláva žiadne výnimky.
parametre fesetexceptflag ()
- flagp: Ukazovateľ na objekt fexcept_t, odkiaľ sa budú príznaky čítať.
- výnimky: Zoznam bitových masiek nastavených príznakov výnimiek.
Makro | Typ | Popis |
---|---|---|
FE_DIVBYZERO | Chyba pólu | Delenie nulou |
FE_INEXACT | Nepresné | Nie presné výsledky, ako napríklad (1,0 / 3,0) |
FE_INVALID | Chyba domény | Aspoň jeden použitý argument je hodnota, pre ktorú nie je funkcia definovaná |
FE_OVERFLOW | Chyba rozsahu pretečenia | Výsledok je príliš veľký na to, aby bol reprezentovaný návratovým typom |
FE_UNDERFLOW | Chyba rozsahu podtečenia | Výsledok je príliš malý na to, aby bol reprezentovaný návratovým typom |
FE_ALL_EXCEPT | Všetky výnimky | Všetky výnimky podporované implementáciou |
fesetexceptflag () Vrátená hodnota
- Funkcia fesetexceptflag () vráti pri úspechu nulu, inak nenulové.
Príklad: Ako funguje funkcia 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; )
Po spustení programu bude výstup:
Zvýšené výnimky: FE_DIVBYZERO Zvýšené výnimky: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Zvýšené výnimky: FE_DIVBYZERO