.\" -*- coding: UTF-8 -*- .\" 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 .\" . .\" %%%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. .\" .\"******************************************************************* .TH FENV 3 "15 września 2017 r." 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 \fP .PP \fBint feclearexcept(int \fP\fIexcepts\fP\fB);\fP \fBint fegetexceptflag(fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP \fBint feraiseexcept(int \fP\fIexcepts\fP\fB);\fP \fBint fesetexceptflag(const fexcept_t *\fP\fIflagp\fP\fB, int \fP\fIexcepts\fP\fB);\fP \fBint fetestexcept(int \fP\fIexcepts\fP\fB);\fP .PP \fBint fegetround(void);\fP \fBint fesetround(int \fP\fIrounding_mode\fP\fB);\fP .PP \fBint fegetenv(fenv_t *\fP\fIenvp\fP\fB);\fP \fBint feholdexcept(fenv_t *\fP\fIenvp\fP\fB);\fP \fBint fesetenv(const fenv_t *\fP\fIenvp\fP\fB);\fP \fBint feupdateenv(const fenv_t *\fP\fIenvp\fP\fB);\fP .fi .PP 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ść. .PP 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. .PP 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ą). .PP 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. .PP 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ł). .PP 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. .PP Funkcja \fBfegetexceptflag\fP() umieszcza odwzorowanie stanu znaczników przypisanych wyjątkom reprezentowanym przez argument \fIexcepts\fP w nieprzezroczystym obiekcie \fI*flagp\fP. .PP Funkcja \fBferaiseexcept\fP() zgłasza wspierane wyjątki reprezentowane przez bity \fIexcepts\fP. .PP 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. .PP 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. .PP 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. .PP Funkcja \fBfegetround\fP() zwraca makro odpowiadające bieżącemu trybowi zaokrąglania. .PP Funkcja \fBfesetround\fP() ustawia tryb zaokrąglania podany jako jej argument i zwraca zero, gdy się powiedzie. .PP C99 i POSIX.1\-2008 określają identyfikator \fBFLT_ROUNDS\fP definiowany w \fI\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). .PP Funkcja \fBfegetenv\fP() zachowuje bieżące środowisko zmiennoprzecinkowe w obiekcie \fI*envp\fP. .PP 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. .PP 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. .PP 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 Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku \fBattributes\fP(7). .nh .ad l .TS allbox; lb lb lb lw35 l l. Interfejs Atrybut Wartość T{ \fBfeclearexcept\fP(), \fBfegetexceptflag\fP(), \fBferaiseexcept\fP(), \fBfesetexceptflag\fP(), \fBfetestexcept\fP(), \fBfegetround\fP(), \fBfesetround\fP(), \fBfegetenv\fP(), \fBfeholdexcept\fP(), \fBfesetenv\fP(), \fBfeupdateenv\fP(), \fBfeenableexcept\fP(), \fBfedisableexcept\fP(), \fBfegetexcept\fP() T} Bezpieczeństwo wątkowe T{ MT\-Safe T} .TE .ad .hy .SH "ZGODNE Z" IEC 60559 (IEC 559:1989), ANSI/IEEE 854, C99, POSIX.1\-2001. .SH UWAGI .SS "Uwagi dla 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. .PP .nf \fB#define _GNU_SOURCE\fP /* Patrz feature_test_macros(7) */ \fB#include \fP .PP \fBint feenableexcept(int \fP\fIexcepts\fP\fB);\fP \fBint fedisableexcept(int \fP\fIexcepts\fP\fB);\fP \fBint fegetexcept(void);\fP .fi .PP 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 .\" 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 5.10 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 \%https://www.kernel.org/doc/man\-pages/. .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .