fegetround
, fesetround
Ottiene o imposta la modalità di arrotondamento a virgola mobile corrente.
Sintassi
int fegetround(void);
int fesetround(int round_mode);
Parametri
round_mode
La modalità di arrotondamento da impostare, come una delle macro di arrotondamento a virgola mobile. Se il valore non è uguale a una delle macro di arrotondamento a virgola mobile, la modalità di arrotondamento non viene modificata.
Valore restituito
Se riesce, fegetround
restituisce la modalità di arrotondamento come valori di una delle macro di arrotondamento a virgola mobile. Restituisce un valore negativo se non è possibile determinare la modalità di arrotondamento corrente.
Se riesce, fesetround
restituisce 0. In caso contrario, viene restituito un valore diverso da zero.
Osservazioni:
Le operazioni a virgola mobile possono usare una delle diverse modalità di arrotondamento. Queste modalità controllano la direzione in cui i risultati delle operazioni a virgola mobile vengono arrotondati quando vengono archiviati i risultati. Ecco i nomi e i comportamenti delle macro di arrotondamento a virgola mobile definite in <fenv.h>:
Macro | Descrizione |
---|---|
FE_DOWNWARD |
Arrotonda verso l'infinito negativo. |
FE_TONEAREST |
Arrotonda verso il valore più vicino. |
FE_TOWARDZERO |
Arrotonda per difetto. |
FE_UPWARD |
Arrotonda verso l'infinito positivo. |
Il comportamento predefinito di FE_TONEAREST
consiste nell'arrotondare i risultati a metà strada tra i valori rappresentabili verso il valore più vicino con un bit pari (0) meno significativo.
La modalità di arrotondamento corrente influisce su queste operazioni:
- Conversioni di stringhe.
- Risultati degli operatori aritmetici a virgola mobile al di fuori delle espressioni costanti.
- Funzioni di arrotondamento della libreria, ad esempio
rint
enearbyint
. - Valori restituiti da funzioni matematiche della libreria standard.
La modalità di arrotondamento corrente non influisce su queste operazioni:
- Funzioni della libreria
trunc
,ceil
,floor
elround
. - Conversioni e cast impliciti da virgola mobile a tipo integer, arrotondati sempre per difetto.
- Risultati degli operatori aritmetici a virgola mobile nelle espressioni costanti, arrotondati sempre al valore più vicino.
Per usare queste funzioni, è necessario disattivare le ottimizzazioni a virgola mobile che potrebbero impedire l'accesso usando la direttiva #pragma fenv_access(on)
prima della chiamata. Per ulteriori informazioni, vedere fenv_access
.
Importante
Prima di Windows 10 versione 14393, fenv.h
definito FE_UPWARD = 0x0100
e FE_DOWNWARD = 0x0200
. In Windows versione 14393, questa intestazione è stata aggiornata per risolvere un bug in cui alcune API interpreterebbero FE_UPWARD
come FE_DOWNWARD
e viceversa. A partire da Windows versione 14393 FE_UPWARD = 0x0200
e FE_DOWNWARD = 0x0100
, ripristinando i valori precedenti.
Se l'app è stata compilata in base a una versione precedente di Windows SDK (questo problema dipende dalla versione dell'SDK, non dalla versione del sistema operativo o dalla versione di Visual Studio), è possibile che si verifichi questo problema. Aggiornare l'app per specificare come destinazione la versione più recente di Windows SDK in modo che le definizioni di e FE_DOWNWARD
siano coerenti con l'implementazione di FE_UPWARD
Windows. Se non è possibile aggiornare l'app in modo che venga usata come destinazione di windows SDK successivo, è possibile definire FE_UPWARD
come 0x0100
e FE_DOWNWARD
come 0x0200
nel codice.
Requisiti
Funzione | Intestazione C | Intestazione C++ |
---|---|---|
fegetround , fesetround |
<fenv.h> |
<cfenv> |
Per altre informazioni, vedere Compatibility.
Vedi anche
Informazioni di riferimento sulle funzioni alfabetiche
nearbyint
, nearbyintf
, nearbyintl
rint
, rintf
, rintl
lrint
, lrintf
, lrintl
, llrint
, llrintf
llrintl