C ++ 'daki fesetexceptflag () işlevi, bir işaretçi nesnesinden kayan nokta ortamına belirtilen kayan nokta istisna bayraklarını ayarlar.
Fesetexceptflag () işlevi başlık dosyasında tanımlanmıştır.
fesetexceptflag () prototipi
int fesetexceptflag (const fexcept_t * flagp, int istisnaları);
Fesetexceptflag () işlevi, istisnalar tarafından belirtilen kayan nokta istisna bayraklarının tüm içeriğini flagp'den kayan noktalı ortama kopyalamaya çalışır.
Bu işlev yalnızca bayrakları değiştirir ve herhangi bir istisna oluşturmaz.
fesetexceptflag () Parametreler
- flagp: Bayrakların okunacağı fexcept_t nesnesine işaretçi.
- excepts: Ayarlanacak istisna bayraklarının bit maskesi listesi.
Makro | Tür | Açıklama |
---|---|---|
FE_DIVBYZERO | Kutup hatası | Sıfıra bölüm |
FE_INEXACT | Hatasız | (1.0 / 3.0) gibi kesin sonuçlar değil |
FE_INVALID | Alan hatası | Kullanılan en az bir argüman, işlevin tanımlanmadığı bir değerdir |
FE_OVERFLOW | Taşma aralığı hatası | Sonuç, dönüş türüyle temsil edilemeyecek kadar büyüklükte |
FE_UNDERFLOW | Alt akış aralığı hatası | Sonuç, dönüş türüyle temsil edilemeyecek kadar küçüktür |
FE_ALL_EXCEPT | Tüm istisnalar | Uygulama tarafından desteklenen tüm istisnalar |
fesetexceptflag () Dönüş değeri
- Fesetexceptflag () işlevi başarı durumunda sıfır, aksi takdirde sıfır olmayan bir değer döndürür.
Örnek: fesetexceptflag () işlevi nasıl çalışır?
#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; )
Programı çalıştırdığınızda, çıktı:
Yükseltilmiş istisnalar: FE_DIVBYZERO Yükseltilmiş istisnalar: FE_DIVBYZERO FE_INVALID FE_OVERFLOW Yükseltilmiş istisnalar: FE_DIVBYZERO