BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <fenv.h> (C99) > feholdexcept

feholdexcept() fonksiyonu

Bildirim

int feholdexcept(fenv_t* envp); (C99)

Açıklama

Önce aktif float değer ortam değerlerini envp ile gösterilen değişkene kaydeder, float değer durum değerlerini temizler ve durmadan çalışma modunu yükler (gelecekteki float değer istisnaları çalışmayı durdurmaz). Bu durum float değer ortamı feupdateenv() veya fesetenv() fonksiyonları tarafından yeniden yüklenene kadar devam eder.

Parametreler

envp: Float değer ortamının kaydedileceği fenv_t yapı değişken işaretçisidir.

Dönüş değeri

Fonksiyon başarılı bir şekilde çalışırsa 0, aksi takdirde 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) {
    fenv_t curr_excepts;
    div_t dv;
    float fd1=7.54, fd2=2.63;

    feclearexcept (FE_ALL_EXCEPT);
    dv = div(fd1, fd2);

    Test_Except(fetestexcept(FE_ALL_EXCEPT));

    /* Float değer ortam değerlerini kaydeder ve siler. */
    feholdexcept(&curr_excepts);

    Test_Except(fetestexcept(FE_ALL_EXCEPT));

    /* Daha önce feholdexcept() fonksiyonu ile kaydedilen float değer ortam değerlerini yükler */
    feupdateenv(&curr_excepts);

    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
İşlem hata bildirimi: FE_INEXACT

Yukarıdaki program, div() fonksiyonunu int değerlerle çalıştırır. Fonksiyonda float değerler yerine int değerler kullanıldığından FE_INEXACT hata bildirimi alınır. Float değer ortam değerleri feholdexcept() fonksiyonu ile curr_excepts değişkenine kaydedilir ve silinir. Daha sonra, feupdateenv() fonksiyonu ile curr_excepts değişkenine kaydedilmiş olan ortam değerleri geri yüklenir.