fegetround, fesetround

Pobiera lub ustawia bieżący tryb zaokrąglania zmiennoprzecinkowego.

Składnia

int fegetround(void);
int fesetround(int round_mode);

Parametry

round_mode
Tryb zaokrąglania do ustawienia jako jedno z makr zaokrąglania zmiennoprzecinkowego. Jeśli wartość nie jest równa jednemu z makr zaokrąglania zmiennoprzecinkowego, tryb zaokrąglania nie zostanie zmieniony.

Wartość zwracana

W przypadku powodzenia fegetround zwraca tryb zaokrąglania jako jedną z wartości makr zaokrąglania zmiennoprzecinkowego. Zwraca wartość ujemną, jeśli nie można określić bieżącego trybu zaokrąglania.

Po powodzeniu fesetround zwraca wartość 0. W przeciwnym razie zwracana jest wartość niezerowa.

Uwagi

Operacje zmiennoprzecinkowe mogą używać jednego z kilku trybów zaokrąglania. Tryby te kontrolują kierunek, w którym wyniki operacji zmiennoprzecinkowych są zaokrąglane w kierunku, gdy wyniki są przechowywane. Poniżej przedstawiono nazwy i zachowania makr zaokrąglania zmiennoprzecinkowego zdefiniowane w <pliku fenv.h>:

Macro opis
FE_DOWNWARD Zaokrąglaj w kierunku nieskończoności ujemnej.
FE_TONEAREST Zaokrąglij w kierunku najbliższej.
FE_TOWARDZERO Zaokrąglaj w kierunku zera.
FE_UPWARD Zaokrąglaj w kierunku nieskończoności dodatniej.

Domyślnym zachowaniem FE_TONEAREST jest zaokrąglenie wyników w połowie między wartościami reprezentującymi w kierunku najbliższej wartości z parzystą (0) najmniej znaczącą bitem.

Bieżący tryb zaokrąglania ma wpływ na następujące operacje:

  • Konwersje ciągów.
  • Wyniki operatorów arytmetycznych zmiennoprzecinkowych poza wyrażeniami stałymi.
  • Funkcje zaokrąglania biblioteki, takie jak rint i nearbyint.
  • Zwraca wartości z standardowych funkcji matematycznych biblioteki.

Bieżący tryb zaokrąglania nie ma wpływu na te operacje:

  • Funkcje truncbiblioteki , ceil, floori lround .
  • Zmiennoprzecinkowe do liczb całkowitych niejawne rzutowania i konwersje, które zawsze zaokrąglają się w kierunku zera.
  • Wyniki operatorów arytmetycznych zmiennoprzecinkowych w wyrażeniach stałych, które zawsze są zaokrąglone do najbliższej wartości.

Aby korzystać z tych funkcji, należy wyłączyć optymalizacje zmiennoprzecinkowe, które mogłyby uniemożliwić dostęp przy użyciu #pragma fenv_access(on) dyrektywy przed wywołaniem. W celu uzyskania więcej informacji, zobacz następujący temat: fenv_access.

Ważne

Przed systemem Windows 10 w wersji 14393 fenv.h zdefiniowano FE_UPWARD = 0x0100 i FE_DOWNWARD = 0x0200. W systemie Windows w wersji 14393 ten nagłówek został zaktualizowany, aby rozwiązać problem z usterką, w której niektóre interfejsy API będą interpretować FE_UPWARD jako FE_DOWNWARD, i na odwrót. Począwszy od systemu Windows w wersji 14393 FE_UPWARD = 0x0200 i FE_DOWNWARD = 0x0100, odwracając poprzednie wartości. Jeśli skompilujesz aplikację względem starej wersji zestawu Windows SDK (ten problem zależy od wersji zestawu SDK, a nie wersji systemu operacyjnego lub wersji programu VS), może wystąpić ten problem. Zaktualizuj aplikację tak, aby była zgodna z najnowszą wersją zestawu Windows SDK, tak aby definicje FE_UPWARD i FE_DOWNWARD były zgodne z implementacją systemu Windows. Jeśli nie możesz zaktualizować aplikacji do późniejszego zestawu SDK systemu Windows, możesz zdefiniować FE_UPWARD jako 0x0100 i FE_DOWNWARD tak jak 0x0200 w kodzie.

Wymagania

Function Nagłówek języka C Nagłówek języka C++
fegetround, fesetround <fenv.h> <cfenv>

Aby uzyskać więcej informacji, zobacz Zgodność.

Zobacz też

Odwołanie do funkcji alfabetycznej
nearbyint, nearbyintf, nearbyintl
rint, rintf, rintl
lrint, lrintf, lrintl, llrint, llrintf, llrintl