.\" Copyright (c) 2000 Andries Brouwer (aeb@cwi.nl)
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" <http://www.gnu.org/licenses/>.
.\" %%%LICENSE_END
.\"
.\" 2000-08-14 added GNU additions from Andreas Jaeger
.\" 2000-12-05 some changes inspired by acahalan's remarks
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\" This file is distributed under the same license as original manpage
.\" Copyright of the original manpage:
.\" Copyright ©  2000 Andries Brouwer 
.\" Copyright © of Polish translation:
.\" Andrzej Krzysztofowicz (PTM) <ankry@green.mf.pg.gda.pl>, 2001.
.\" Robert Luberda <robert@debian.org>, 2013.
.\" Michał Kułach <michal.kulach@gmail.com>, 2014.
.TH FENV 3 2014\-04\-01 Linux "Podręcznik programisty Linuksa"
.SH NAZWA
feclearexcept, fegetexceptflag, feraiseexcept, fesetexceptflag,
fetestexcept, fegetenv, fegetround, feholdexcept, fesetround, fesetenv,
feupdateenv, feenableexcept, fedisableexcept, fegetexcept \- zaokrąglanie
zmiennoprzecinkowe i obsługa wyjątków
.SH SKŁADNIA
.nf
\fB#include <fenv.h>\fP
.sp
\fBint feclearexcept(int \fP\fIexcepts\fP\fB);\fP
.br
\fBint fegetexceptflag(fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP
.br
\fBint feraiseexcept(int \fP\fIexcepts\fP\fB);\fP
.br
\fBint fesetexceptflag(const fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP
.br
\fBint fetestexcept(int \fP\fIexcepts\fP\fB);\fP
.sp
\fBint fegetround(void);\fP
.br
\fBint fesetround(int \fP\fIrounding_mode\fP\fB);\fP
.sp
\fBint fegetenv(fenv_t *\fP\fIenvp\fP\fB);\fP
.br
\fBint feholdexcept(fenv_t *\fP\fIenvp\fP\fB);\fP
.br
\fBint fesetenv(const fenv_t *\fP\fIenvp\fP\fB);\fP
.br
\fBint feupdateenv(const fenv_t *\fP\fIenvp\fP\fB);\fP
.fi
.sp
Proszę linkować z \fI\-lm\fP.
.SH OPIS
Tych jedenaście funkcji zdefiniowanych w C99 realizuje obsługę
zmiennoprzecinkowego zaokrąglania i wyjątków (nadmiar, dzielenie przez zero,
itp.).
.SS Wyjątki
Wyjątek \fIdivide\-by\-zero\fP (dzielenie przez zero) występuje, gdy dokładnym
wynikiem operacji na liczbach skończonych jest nieskończoność.
.LP
Wyjątek \fIoverflow\fP (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.
.LP
Wyjątek \fIunderflow\fP (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ą).
.LP
Wyjątek \fIinexact\fP (niedokładny) występuje, gdy wynik operacji zaokrąglenia
nie jest równy wynikowi o nieskończonej precyzji. Może on towarzyszyć
wystąpieniu \fIoverflow\fP lub \fIunderflow\fP.
.LP
Wyjątek \fIinvalid\fP (nieprawidłowy) występuje, gdy operacja nie ma dobrze
zdefiniowanego wyniku, przykłady: 0/0, nieskończoność \- nieskończoność lub
sqrt(\-1).
.SS "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ł).
.LP
Każde z makr \fBFE_DIVBYZERO\fP, \fBFE_INEXACT\fP, \fBFE_INVALID\fP, \fBFE_OVERFLOW\fP,
\fBFE_UNDERFLOW\fP 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 \fBFE_OVERFLOW\fP|\fBFE_UNDERFLOW\fP. Dla innych wyjątków może
nie być wsparcia. Makro \fBFE_ALL_EXCEPT\fP jest bitowym OR wszystkich bitów
odpowiadającym wspieranym wyjątkom.
.PP
Funkcja \fBfeclearexcept\fP() zeruje wspierane wyjątki reprezentowane przez
bity jej argumentu.
.LP
Funkcja \fBfegetexceptflag\fP() umieszcza odwzorowanie stanu znaczników
przypisanych wyjątkom reprezentowanym przez argument \fIexcepts\fP w
nieprzezroczystym obiekcie \fI*flagp\fP.
.LP
Funkcja \fBferaiseexcept\fP() zgłasza wspierane wyjątki reprezentowane przez
bity \fIexcepts\fP.
.LP
Funkcja \fBfesetexceptflag\fP() ustawia pełny stan o wartości \fI*flagp\fP dla
wyjątków reprezentowanych przez \fIexcepts\fP. Wartość ta musi być otrzymana
jako wynik wcześniejszego wywołania \fBfegetexceptflag\fP() z ostatnim
argumentem zawierającym wszystkie bity \fIexcepts\fP.
.LP
Funkcja \fBfetestexcept\fP() zwraca słowo z ustawionymi tymi bitami, które są
ustawione w argumencie \fIexcepts\fP i dla których jest obecnie ustawiony
odpowiedni wyjątek.
.SS "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 \fBFE_TONEAREST\fP, \fBFE_UPWARD\fP, \fBFE_DOWNWARD\fP oraz
\fBFE_TOWARDZERO\fP jest zdefiniowane, gdy implementacja wspiera pobieranie i
ustawianie odpowiedniego kierunku zaokrąglania.
.LP
Funkcja \fBfegetround\fP() zwraca makro odpowiadające bieżącemu trybowi
zaokrąglania.
.LP
Funkcja \fBfesetround\fP() ustawia tryb zaokrąglania podany jako jej argument i
zwraca zero, gdy się powiedzie.

C99 i POSIX.1\-2008 określają identyfikator \fBFLT_ROUNDS\fP definiowany w
\fI<float.h>\fP 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:
.IP \-1
Nie można określić tryb zaokrąglania.
.IP 0
Zaokrąglanie w kierunku 0.
.IP 1
Zaokrąglanie w kierunku najbliższej liczby.
.IP 2
Zaokrąglanie w kierunku dodatniej nieskończoności.
.IP 3
Zaokrąglanie w kierunku ujemnej nieskończoności.
.PP
Inne wartości oznaczają tryby zaokrąglania niestandardowe, zależne od
architektury komputera.
.PP
Wartość \fBFLT_ROUNDS\fP powinna odzwierciedlać bieżący tryb zaokrąglania
ustawiony przez \fBfesetround\fP() (patrz także BŁĘDY IMPLEMENTACJI).
.SS "Ś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 \fIfenv_t\fP.  Środowisko domyślne jest określone przez \fBFE_DFL_ENV\fP
(typu \fIconst fenv_t\ *\fP). 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).
.LP
Funkcja \fBfegetenv\fP() zachowuje bieżące środowisko zmiennoprzecinkowe w
obiekcie \fI*envp\fP.
.LP
Funkcja \fBfeholdexcept\fP() 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.
.LP
Funkcja \fBfesetenv\fP() odtwarza środowisko zmiennoprzecinkowe z obiektu
\fI*envp\fP. Obiekt ten musi być znany jako poprawny, na przykład jako wynik
wywołania \fBfegetenv\fP() lub \fBfeholdexcept\fP() lub jako równy
\fBFE_DFL_ENV\fP. To wywołanie nie zgłasza wyjątków.
.LP
Funkcja \fBfeupdateenv\fP() instaluje środowisko zmiennoprzecinkowe odwzorowane
w obiekcie \fI*envp\fP, 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 \fI*envp\fP. Jak poprzednio, obiekt
\fI*envp\fP musi być znany jako poprawny.
.SH "WARTOŚĆ ZWRACANA"
.\" Earlier seven of these functions were listed as returning void.
.\" This was corrected in Corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))
.\" of the C99 Standard.
Funkcje te zwracają zero, gdy się powiodą, lub wartość niezerową, gdy
wystąpi błąd.
.SH WERSJE
Funkcje te pojawiły się po raz pierwszy w wersji 2.1 biblioteki glibc.
.SH ATRYBUTY
.SS "Wielowątkowość (patrz pthreads(7))"
Funkcje \fBfeclearexcept\fP(), \fBfegetexceptflag\fP(), \fBfegetexceptflag\fP(),
\fBfesetexceptflag\fP(), \fBfetestexcept\fP(), \fBfegetround\fP(), \fBfesetround\fP(),
\fBfegetenv\fP(), \fBfeholdexcept\fP(), \fBfesetenv\fP(), \fBfeupdateenv\fP(),
\fBfeenableexcept\fP(), \fBfedisableexcept\fP() i \fBfegetexcept\fP() są wątkowo
bezpieczne.
.SH "ZGODNE Z"
IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1\-2001.
.SH UWAGI
.SS "Uwagi dotyczące biblioteki glibc"
O ile to możliwe, biblioteka GNU C definiuje makro \fBFE_NOMASK_ENV\fP
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ą
\fB#ifdef\fP. Jest ono zdefiniowane jedynie, gdy zdefiniowane jest
\fB_GNU_SOURCE\fP. 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
\fBfeenableexcept\fP() i \fBfedisableexcept\fP() ustawiające wybrane znaczniki
zmiennoprzecinkowe oraz \fBfegetexcept\fP() odpytującą o stan.
.sp
.nf
\fB#define _GNU_SOURCE\fP         /* Patrz feature_test_macros(7) */
.br
\fB#include <fenv.h>\fP
.sp
\fBint feenableexcept(int \fP\fIexcepts\fP\fB);\fP
.br
\fBint fedisableexcept(int \fP\fIexcepts\fP\fB);\fP
.br
\fBint fegetexcept(void);\fP
.br
.fi
.LP
Funkcje \fBfeenableexcept\fP() i \fBfedisableexcept\fP() włączają (wyłączają)
pułapkowanie poszczególnych wyjątków odwzorowanych w przez \fIexcepts\fP i
zwracają poprzednie ustawienie pułapkowania wyjątków, jeśli się powiodą, a
\-1 w pozostałych przypadkach. Funkcja \fBfegetexcept\fP() zwraca bieżące
ustawienie pułapkowania wyjątków.
.SH "BŁĘDY IMPLEMENTACJI"
.\" Aug 08, glibc 2.8
.\" See http://gcc.gnu.org/ml/gcc/2002-02/msg01535.html
C99 określa, że wartość \fBFLT_ROUNDS\fP powinna odzwierciedlać zmiany
bieżącego trybu zaokrąglania ustawiane przez \fBfesetround\fP(). Obecnie to nie
działa: \fBFLT_ROUNDS\fP ma zawsze wartość 1.
.SH "ZOBACZ TAKŻE"
\fBmath_error\fP(7)
.SH "O STRONIE"
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
\fIman\-pages\fP. Opis projektu, informacje dotyczące zgłaszania błędów, oraz
najnowszą wersję oryginału można znaleźć pod adresem
\%http://www.kernel.org/doc/man\-pages/.
.SH 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>.
.PP
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ą \fB 3.71 \fPoryginału.
