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>:
Makro | 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
inearbyint
. - Zwraca wartości z standardowych funkcji matematycznych biblioteki.
Bieżący tryb zaokrąglania nie ma wpływu na te operacje:
- Funkcje
trunc
biblioteki ,ceil
,floor
ilround
. - 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. Aby uzyskać więcej informacji, zobacz 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