NAZWA¶
feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag, fetestexcept,
  fegetenv, fegetround, feholdexcept, fesetround, fesetenv, feupdateenv -
  zaokrąglanie zmiennoprzecinkowe i obsługa wyjątków w C99
SKŁADNIA¶
#include <fenv.h>
 
void feclearexcept(int excepts);
 
void fegetexceptflag(fexcept_t *flagp, int excepts);
 
void feraiseexcept(int excepts);
 
void fesetexceptflag(const fexcept_t *flagp, int excepts);
 
int fetestexcept(int excepts);
 
int fegetround(void);
 
int fesetround(int rounding_mode);
 
void fegetenv(fenv_t *envp);
 
int feholdexcept(fenv_t *envp);
 
void fesetenv(const fenv_t *envp);
 
void feupdateenv(const fenv_t *envp);
OPIS¶
 Uwaga! To tłumaczenie może być nieaktualne!
Tych jedenaście funkcji zdefiniowano w C99. Realizują one
  obsługę zmiennoprzecinkowego zaokrąglania i wyjątków
  (nadmiar, dzielenie przez zero, itp.).
Wyjątki¶
Wyjątek DivideByZero (dzielenie przez zero) występuje gdy
  dokładnym wynikiem operacji na liczbach skończonych jest
  nieskończoność.
Wyjątek Overflow (nadmiar) występuje gdy wynik musi być
  przedstawiony jako liczba zmiennoprzecinkowa, ale ma on (dużo)
  większą wartość bezwzględną niż
  największa (skończona) liczba zmiennoprzecinkowa posiadająca
  przedstawienie.
Wyjątek Underflow (niedomiar) występuje gdy wynik musi być
  przedstawiony jako liczba zmiennoprzecinkowa, ale ma on mniejszą
  wartość bezwzględną niż najmniejsza dodatnia
  znormalizowana iczba zmiennoprzecinkowa (i nastąpiłaby duża
  utrata precyzji, gdyby przedstawić go jako liczbę
  nieznormalizowaną).
Wyjątek Inexact (niedokładny) występuje gdy wynik operacji
  zaokrąglenia nie jest równy wynikowi o nieskończonej precyzji.
  Może on towarzyszyć wystąpieniu Overflow lub Underflow.
Wyjątek Invalid (nieprawidłowy) występuje gdy operacja nie ma
  dobrze zdefiniowanego wyniku, jak dla 0/0, nieskończoność -
  nieskończoność lub sqrt(-1).
Obsługa wyjątków¶
Wyjątki są reprezentowane na dwa sposoby: jako pojedyncze bity
  (wyjątek obecny/nieobecny), które to bity odpowiadają w pewien
  zależny od implementacji sposób pozycjom bitowym w liczbie
  całkowitej, i jako nieprzezroczysta struktura, która może
  zawierać więcej informacji o wyjątkach (zapewne adres kodu,
  gdzie wyjątek wystąpił).
Każde z makr 
FE_DIVBYZERO, 
FE_INEXACT, 
FE_INVALID,
  
FE_OVERFLOW, 
FE_UNDERFLOW jest zdefiniowane, gdy implementacja
  wspiera obsługę odpowiedniego wyjątku, i wówczas definiuje
  ono odpowiedni(e) bit(y), umożliwiając wywoływanie funkcji
  obsługi wyjątków, np. podając argument całkowity
  
FE_OVERFLOW|
FE_UNDERFLOW. Dla innych wyjątków
  może nie być wsparcia. Makro 
FE_ALL_EXCEPT jest bitowym OR
  wszystkich bitów odpowiadającym wspieranym wyjątkom.
Funkcja 
feclearexcept zeruje wspierane wyjątki reprezentowane przez
  bity jej argumentu.
Funkcja 
fegetexceptflag umieszcza odwzorowanie stanu znaczników
  przypisanych wyjątkom reprezentowanym przez argument 
excepts w
  nieprzezroczystym obiekcie *
flagp.
Funkcja 
feraiseexcept zgłasza wspierane wyjątki reprezentowane
  przez bity 
excepts.
Funkcja 
fesetexceptflag ustawia pełny stan o wartości
  *
flagp dla wyjątków reprezentowanych przez 
excepts.
  Wartość ta musi być otrzymana jako wynik wcześniejszego
  wywołania 
fegetexceptflag z ostatnim argumentem zawierającym
  wszystkie bity 
excepts.
Funkcja 
fetestexcept zwraca słowo z ustawionymi tymi bitami,
  które są ustawione w argumencie 
excepts, i dla których
  jest aktualnie ustawiony odpowiedni wyjątek.
Rounding¶
Każde z makr 
FE_DOWNWARD, 
FE_TONEAREST, 
FE_TOWARDZERO,
  
FE_UPWARD jest zdefiniowane, gdy implementacja wspiera pobieranie i
  ustawianie odpowiedniego kierunku zaokrąglania.
Funkcja 
fegetround zwraca makro odpowiedające aktualnemu trybowi
  zaokrąglania.
Funkcja 
fesetround ustawia tryb zaokrąglania podany jako jej
  argument i zwraca zero gdy się powiedzie.
Środowisko zmiennoprzecinkowe¶
Całe środowisko zmiennoprzecinkowe, włączając w to
  tryby sterowania i znaczniki stanu, może być obsługiwane jako
  jeden nieprzezroczysty obiekt typu 
fenv_t. Środowisko
  domyślne jest określone przez 
FE_DFL_ENV (typu 
const
  fenv_t *). Są to ustawienia środowiska przy uruchomieniu
  programu i są one zdefiniowane przez ISO C jako: zaokrąglanie do
  najbliższej, wszystkie wyjątki wyzerowane i tryb nieprzerywany
  (kontynuacja w przypadku wystąpienia wyjątku).
Funkcja 
fegetenv zachowuje aktualne środowisko zmiennoprzecinkowe w
  obiekcie *
envp.
Funkcja 
feholdexcept robi to samo, a następnie zeruje wszystkie
  znaczniki wyjątków i ustawia tryb nieprzerywany (kontynuacja w
  przypadku wystąpienia wyjątku), o ile to możliwe. Zwraca zero,
  gdy się powiedzie.
Funkcja 
fesetenv odtwarza środowisko zmiennoprzecinkowe z obiektu
  *
envp. Obiekt ten musi być znany jako poprawny, np. jako wynik
  wywołania 
fegetenv lub 
feholdexcept lub jako równy
  
FE_DFL_ENV. To wywołanie nie zgłasza wyjątków.
Funkcja 
feupdateenv instaluje środowisko zmiennoprzecinkowe
  odwzorowane w obiekcie *
envp, poza tym, że aktualnie
  zgłoszone wyjątki nie są zerowane. Po jej wywołaniu,
  zgłoszone wyjątki będą bitowym OR tych zgłoszonych
  wcześniej oraz zawartych w *
envp. Jak poprzednio, obiekt
  *
envp musi być znany jako poprawny.
 
SZCZEGÓŁY GNU¶
O ile to możliwe, biblioteka GNU C definiuje makro 
FE_NOMASK_ENV
  odwzorowujące środowisko, w którym każde zgłoszenie
  wyjątku powoduje wystąpienie pułapki. Można sprawdzać
  wartość tego makra za pomocą 
#ifdef. Jest ono
  zdefiniowane jedynie, gdy zdefiniowane jest 
_GNU_SOURCE. Standard C99
  nie określa sposobu ustawiania poszczególnych bitów w masce
  zmiennoprzecinkowej, np. aby przechwytywać tylko wybrane znaczniki. glibc
  2.2 będzie obsługiwać funkcje 
feenableexcept i
  
fedisableexcept ustawiające wybrane znaczniki zmiennoprzecinkowe
  oraz 
fegetexcept odpytującą o stan.
 
int feenableexcept (int excepts);
 
int fedisableexcept (int excepts);
 
int fegetexcept (void);
 
Funkcje 
feenableexcept i 
fedisableexcept włączają
  (wyłączają) pułapkowanie poszczególnych
  wyjątków odwzorowanych w przez 
excepts i zwracają
  poprzednie ustawienie pułapkowania wyjątków, jeśli
  się powiodą, a -1 w pozostałych przypadkach. Funkcja
  
fegetexcept zwraca aktualne ustawienie pułapkowania
  wyjątków.
 
ZGODNE Z¶
IEC 60559 (IEC 559:1989), ANSI/IEEE 854, ISO C99 (ISO/IEC 9899:1999).
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
  Tłumaczenia Manuali i 
może nie być aktualne. W razie
  zauważenia różnic między powyższym opisem a
  rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
  zapoznanie się z oryginalną (angielską) wersją strony
  podręcznika za pomocą polecenia:
  
  - man --locale=C 3 fenv
 
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
  znaleźć pod adresem
  
http://sourceforge.net/projects/manpages-pl/.