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 a nearbyint.
  • Vrátí hodnoty ze standardních matematických funkcí knihovny.

Aktuální režim zaokrouhlení nemá vliv na tyto operace:

  • Funkce trunc, ceila floorlround 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_DOWNWARDa naopak. Počínaje Windows verze 14393 FE_UPWARD = 0x0200 a FE_DOWNWARD = 0x0100vrá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, , nearbyintfnearbyintl
rint, , rintfrintl
lrint, lrintf, lrintl, llrint, , llrintfllrintl