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 e nearbyint.
  • Valori restituiti da funzioni matematiche della libreria standard.

La modalità di arrotondamento corrente non influisce su queste operazioni:

  • Funzioni della libreria trunc, ceil, floore lround .
  • 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_DOWNWARDe 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, llrintfllrintl