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

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

feupdateenv() fonksiyonu

Bildirim

int feupdateenv(const fenv_t* envp); (C99)

Açıklama

İlk olarak, aktif float değer istisnalarını hatırlar, sonra float değer ortamını envp ile gösterilen değişkenden geri yükler, daha sonra kaydedilen float değer istisnalarını devreye sokar.

Bu fonksiyon, daha önce feholdexcept() fonksiyonu ile oluşturulan durmaksızın çalışma modunu sonlandırmak için kullanılabilir.

Parametreler

envp: Float değer ortamının yükleneceğ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.