Provided by: manpages-pl-dev_0.7-1_all bug

NAZWA

       feclearexcept,  fegetexceptflag,  feraiseexcept,  fesetexceptflag,  fetestexcept,  fegetenv,  fegetround,
       feholdexcept,  fesetround,  fesetenv,  feupdateenv,  feenableexcept,   fedisableexcept,   fegetexcept   -
       zaokrąglanie zmiennoprzecinkowe i obsługa wyjątków

SKŁADNIA

       #include <fenv.h>

       int feclearexcept(int excepts);
       int fegetexceptflag(fexcept_t *flagp, int excepts);
       int feraiseexcept(int excepts);
       int fesetexceptflag(const fexcept_t *flagp, int excepts);
       int fetestexcept(int excepts);

       int fegetround(void);
       int fesetround(int rounding_mode);

       int fegetenv(fenv_t *envp);
       int feholdexcept(fenv_t *envp);
       int fesetenv(const fenv_t *envp);
       int feupdateenv(const fenv_t *envp);

       Proszę linkować z -lm.

OPIS

       Tych  jedenaście  funkcji  zdefiniowanych  w  C99  realizuje  obsługę zmiennoprzecinkowego zaokrąglania i
       wyjątków (nadmiar, dzielenie przez zero, itp.).

   Wyjątki
       Wyjątek divide-by-zero (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  mająca
       przedstawienie.

       Wyjątek underflow (niedomiar) występuje, gdy wynik musi być przedstawiony jako liczba zmiennoprzecinkowa,
       ale ma mniejszą wartość bezwzględną niż najmniejsza dodatnia znormalizowana liczba 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,  przykłady:
       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  odpowiedni(e)  bit(y),
       umożliwiając  wywoływanie  funkcji   obsługi   wyjątków,   na   przykład   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 obecnie ustawiony odpowiedni wyjątek.

   Tryb zaokrąglania
       Tryb zaokrąglania określa w jaki sposób traktuje się wynik operacji zmiennoprzecinkowej, jeśli  nie  może
       być  on dokładnie reprezentowany w mantysie. Mogą być dostarczane różne tryby zaokrągleń: zaokrąglanie do
       najbliższej liczby (domyślnie), zaokrąglanie w górę (w kierunku dodatniej nieskończoności),  zaokrąglanie
       w dół (w kierunku ujemnej nieskończoności) i zaokrąglanie w kierunku zera.

       Każde z makr FE_TONEAREST, FE_UPWARD, FE_DOWNWARD oraz FE_TOWARDZERO jest zdefiniowane, gdy implementacja
       wspiera pobieranie i ustawianie odpowiedniego kierunku zaokrąglania.

       Funkcja fegetround() zwraca makro odpowiadające bieżącemu trybowi zaokrąglania.

       Funkcja fesetround() ustawia tryb zaokrąglania podany jako jej argument i zwraca zero, gdy się powiedzie.

       C99 i POSIX.1-2008 określają identyfikator FLT_ROUNDS definiowany w <float.h> wskazujący  na  zależny  od
       implementacji   sposób  zaokrąglania  podczas  dodawania  zmiennoprzecinkowego.  Identyfikator  ten  może
       przyjmować jedną z poniższych wartości:

       -1     Nie można określić tryb zaokrąglania.

       0      Zaokrąglanie w kierunku 0.

       1      Zaokrąglanie w kierunku najbliższej liczby.

       2      Zaokrąglanie w kierunku dodatniej nieskończoności.

       3      Zaokrąglanie w kierunku ujemnej nieskończoności.

       Inne wartości oznaczają tryby zaokrąglania niestandardowe, zależne od architektury komputera.

       Wartość FLT_ROUNDS powinna odzwierciedlać bieżący tryb zaokrąglania ustawiony przez  fesetround()  (patrz
       także BŁĘDY IMPLEMENTACJI).

   Ś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 bieżące ś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, na przykład 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
       obecnie 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.

WARTOŚĆ ZWRACANA

       Funkcje te zwracają zero, gdy się powiodą, lub wartość niezerową, gdy wystąpi błąd.

WERSJE

       Funkcje te pojawiły się po raz pierwszy w wersji 2.1 biblioteki glibc.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌────────────────────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├────────────────────────────────────┼────────────────────────┼─────────┤
       │feclearexcept(), fegetexceptflag(), │ Bezpieczeństwo wątkowe │ MT-Safe │
       │feraiseexcept(), fesetexceptflag(), │                        │         │
       │fetestexcept(), fegetround(),       │                        │         │
       │fesetround(), fegetenv(),           │                        │         │
       │feholdexcept(), fesetenv(),         │                        │         │
       │feupdateenv(), feenableexcept(),    │                        │         │
       │fedisableexcept(), fegetexcept()    │                        │         │
       └────────────────────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1-2001.

UWAGI

   Uwagi dotyczące biblioteki glibc
       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, na przykład aby przechwytywać tylko  wybrane
       znaczniki.  Od  wersji  2.2.  glibc  obsługuje  funkcje  feenableexcept() i fedisableexcept() ustawiające
       wybrane znaczniki zmiennoprzecinkowe oraz fegetexcept() odpytującą o stan.

       #define _GNU_SOURCE         /* Patrz feature_test_macros(7) */
       #include <fenv.h>

       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 bieżące ustawienie pułapkowania wyjątków.

BŁĘDY IMPLEMENTACJI

       C99 określa, że wartość FLT_ROUNDS powinna odzwierciedlać zmiany bieżącego trybu  zaokrąglania  ustawiane
       przez fesetround(). Obecnie to nie działa: FLT_ROUNDS ma zawsze wartość 1.

ZOBACZ TAKŻE

       math_error(7)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje
       dotyczące   zgłaszania   błędów   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony  podręcznika  man  są:  Andrzej Krzysztofowicz (PTM)
       <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie  błędów  na  stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.07 oryginału.