fenv

Autres langues

Langue: pl

Autres versions - même langue

Version: 2000-08-12 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

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

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).