Bildirim
int fegetenv(fenv_t* envp); (C99)
Açıklama
Fonksiyona geçirilen envp parametresi ile gösterilen yapı değişkenine float değer ortamının durum değerlerini kaydeder.
Parametreler
envp: Float değer ortamının durum değerlerini içeren fenv_t yapı değişkeni 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) {
div_t dv;
fenv_t curr_env;
float fd1=35.24, fd2=5.42;
feclearexcept (FE_ALL_EXCEPT);
dv = div(fd1, fd2);
Test_Except(fetestexcept(FE_ALL_EXCEPT));
/* Float değer ortam değerlerini kaydeder. */
if (!fegetenv(&curr_env)) printf("Ortam değerleri başarılı bir şekilde kaydedildi!\n");
feclearexcept (FE_ALL_EXCEPT);
Test_Except(fetestexcept(FE_ALL_EXCEPT));
/* Float değer ortam değerlerini yükler. */
if (!fesetenv(&curr_env)) printf("Ortam değerleri başarılı bir şekilde geri yüklendi!\n");
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 Ortam değerleri başarılı bir şekilde kaydedildi! İşlem hata bildirimi: Yok Ortam değerleri başarılı bir şekilde geri yüklendi! İş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 fegetenv() fonksiyonu ile curr_env değişkenine kaydedilir. Ortam değerleri sıfırlandıktan sonra, fesetenv() fonksiyonu ile curr_env değişkenine kaydedilmiş olan ortam değişkenleri geri yüklenir.