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.