Bildirim
int feclearexcept(int excepts); (C99)
Açıklama
Fonksiyona geçirilen excepts parametre değerinde yer alan float değer istisnalarını (durum değerlerini) temizler.
Parametreler
excepts: Float değer istisnaları içeren değerdir.
Dönüş değeri
Eğer tüm istisnalar silinir veya excepts parametre değeri 0 ise 0 değeri, bir hata meydana gelirse sıfır olmayan bir değer geri döndürür.
Örnek
#include <stdio.h>
#include <stdlib.h>
#include <fenv.h>
void Test_Except(int idsonuc);
int main(void) {
div_t dv;
int id1=7, id2=2;
float fd1=7.54, fd2=2.63;
feclearexcept (FE_ALL_EXCEPT);
dv = div(fd1, fd2);
Test_Except(fetestexcept(FE_ALL_EXCEPT));
feclearexcept (FE_ALL_EXCEPT);
dv = div(id1, id2);
Test_Except(fetestexcept(FE_ALL_EXCEPT));
return 0;
}
void Test_Except(int idsonuc)
{
printf("İşlem hata bildirimi:");
if (idsonuc==0) printf(" Yok"); // 0 (0x00)
if (idsonuc==FE_INVALID) printf(" FE_INVALID"); // 1 (0x01)
if (idsonuc==FE_DENORMAL) printf(" FE_DENORMAL"); // 2 (0x02)
if (idsonuc==FE_DIVBYZERO) printf(" FE_DIVBYZERO"); // 4 (0x04)
if (idsonuc==FE_OVERFLOW) printf(" FE_OVERFLOW"); // 8 (0x08)
if (idsonuc==FE_UNDERFLOW) printf(" FE_UNDERFLOW"); // 16 (0x10)
if (idsonuc==FE_INEXACT) printf(" FE_INEXACT"); // 32 (0x20)
printf("\n");
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:
İşlem hata bildirimi: FE_INEXACT İşlem hata bildirimi: Yok
Yukarıdaki program, div() fonksiyonunu önce float değerlerle daha sonra int değerlerle çalıştırır. Fonksiyonun ilk çağrısında int değerler yerine float değerler kullanıldığından FE_INEXACT hata bildirimi alınır. İkinci çağrıda ise, int değerler kullanıldığından hata bildirimi yapılmaz. Fonksiyon çağrılarından önce feclearexcept() fonksiyonu ile tüm hata durum bayrakları temizlenir.