fegetround
, fesetround
Získá nebo nastaví aktuální režim zaokrouhlování s plovoucí desetinou čárkou.
Syntaxe
int fegetround(void);
int fesetround(int round_mode);
Parametry
round_mode
Režim zaokrouhlování, který se nastaví, jako jedno z maker s plovoucí desetinou čárkou. Pokud se hodnota nerovná jednomu z maker zaokrouhlování s plovoucí desetinou čárkou, režim zaokrouhlování se nezmění.
Vrácená hodnota
Při úspěchu fegetround
vrátí režim zaokrouhlování jako jednu z hodnot makra s plovoucí desetinou čárkou. Pokud aktuální režim zaokrouhlování nelze určit, vrátí zápornou hodnotu.
Při úspěchu fesetround
vrátí hodnotu 0. V opačném případě se vrátí nenulová hodnota.
Poznámky
Operace s plovoucí desetinou čárkou můžou používat jeden z několika režimů zaokrouhlování. Tyto režimy určují, ve kterém směru se výsledky operací s plovoucí desetinou čárkou zaokrouhlují směrem k uložení výsledků. Tady jsou názvy a chování maker s plovoucí desetinou čárkou definovaných v <souboru fenv.h>:
Makro | Popis |
---|---|
FE_DOWNWARD |
Zaokrouhlení směrem k zápornému nekonečnu. |
FE_TONEAREST |
Zaokrouhlete směrem k nejbližšímu. |
FE_TOWARDZERO |
Zaokrouhlte směrem k nule. |
FE_UPWARD |
Zaokrouhlení směrem k kladnému nekonečnu. |
Výchozí chování FE_TONEAREST
je zaokrouhlit výsledky uprostřed mezi reprezentovatelnými hodnotami směrem k nejbližší hodnotě s nejmenším (0) nejméně významným bitem.
Aktuální režim zaokrouhlování má vliv na tyto operace:
- Převody řetězců.
- Výsledky aritmetických operátorů s plovoucí desetinou čárkou mimo konstantní výrazy.
- Funkce zaokrouhlování knihovny, například
rint
anearbyint
. - Vrátí hodnoty ze standardních matematických funkcí knihovny.
Aktuální režim zaokrouhlení nemá vliv na tyto operace:
- Funkce
trunc
,ceil
afloor
lround
knihovny. - Plovoucí desetiny na celé číslo implicitní přetypování a převody, které vždy zaokrouhlují směrem k nule.
- Výsledky aritmetických operátorů s plovoucí desetinou čárkou ve výrazech konstant, které vždy zaokrouhlují na nejbližší hodnotu.
Pokud chcete tyto funkce použít, musíte vypnout optimalizace s plovoucí desetinou čárkou, které by mohly zabránit přístupu pomocí #pragma fenv_access(on)
direktivy před voláním. Další informace najdete na webu fenv_access
.
Důležité
Před Windows 10 verze 14393 definované fenv.h
FE_UPWARD = 0x0100
a FE_DOWNWARD = 0x0200
. Ve Windows verze 14393 byla tato hlavička aktualizována tak, aby řešila chybu, ve které by některá rozhraní API interpretovala FE_UPWARD
jako FE_DOWNWARD
a naopak. Počínaje Windows verze 14393 FE_UPWARD = 0x0200
a FE_DOWNWARD = 0x0100
vrácením předchozích hodnot zpět.
Pokud jste zkompilovali aplikaci proti staré verzi sady Windows SDK (tento problém závisí na verzi sady SDK, nikoli na verzi operačního systému nebo verzi VS), může k tomuto problému dojít. Aktualizujte aplikaci tak, aby cílila na nejnovější sadu Windows SDK, aby definice FE_UPWARD
a FE_DOWNWARD
byly konzistentní s implementací Windows. Pokud nemůžete aktualizovat aplikaci tak, aby cílila na novější sadu Windows SDK, můžete ji definovat FE_UPWARD
jako 0x0100
a FE_DOWNWARD
jako 0x0200
v kódu.
Požadavky
Function | Záhlaví jazyka C | Hlavička jazyka C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Další informace naleznete v tématu Kompatibilita.
Viz také
Abecední odkaz na funkci
nearbyint
, , nearbyintf
nearbyintl
rint
, , rintf
rintl
lrint
, lrintf
, lrintl
, llrint
, , llrintf
llrintl