/fpcvt (Compatibilità conversione da virgola mobile a integer)

Specifica il modo in cui il compilatore gestisce le conversioni a virgola mobile in tipi integer.

Sintassi

/fpcvt:IA
/fpcvt:BC

Argomenti

/fpcvt:IA

L'opzione /fpcvt:IA indica al compilatore di convertire i valori a virgola mobile in numeri interi in modo che i risultati siano compatibili con le istruzioni di conversione Intel AVX-512. Questo comportamento è il comportamento consueto in Visual Studio 2019 per le destinazioni x86.

/fpcvt:BC

L'opzione /fpcvt:BC indica al compilatore di convertire i valori a virgola mobile in interi senza segno, in modo che i risultati siano compatibili con i compilatori di Visual Studio 2017 e versioni precedenti. Questo comportamento è l'impostazione predefinita in Visual Studio 2022.

Osservazioni:

In Visual Studio 2019 versione 16.8 e versioni successive è possibile usare l'opzione /fpcvt del compilatore per controllare i risultati delle conversioni a virgola mobile a integer. L'opzione /fpcvt:BC specifica il comportamento predefinito di Visual Studio 2022, che corrisponde al comportamento di Visual Studio 2017 e versioni precedenti. L'opzione /fpcvt:IA specifica il comportamento compatibile con il comportamento dell'istruzione di conversione AVX-512 avX-512 di Intel Architecture (IA). Questa opzione può essere usata con destinazioni x86 a 32 bit o x64 a 64 bit e si applica se /arch:AVX512 è specificato o meno.

Per Visual Studio 2019, il comportamento predefinito per le destinazioni x64 è coerente con /fpcvt:BC a meno che non /arch:AVX512 venga specificato. In genere, il comportamento per le destinazioni x86 è coerente con /fpcvt:IA, ad eccezione /arch:IA32di , /arch:SSEo talvolta in cui il risultato di una chiamata di funzione viene convertito direttamente in un intero senza segno. L'uso di esegue l'override dell'impostazione /fpcvt predefinita, quindi tutte le conversioni vengono gestite in modo coerente in entrambe le entità di destinazione. Il comportamento delle conversioni per le destinazioni ARM e ARM64 non è coerente con /fpcvt:BC o /fpcvt:IA.

Standard C++ specifica che se un valore a virgola mobile troncato è esattamente rappresentabile in un tipo integer, deve avere tale valore quando viene convertito in tale tipo. In caso contrario, è consentito qualsiasi comportamento. Entrambe le /fpcvt opzioni sono conformi allo standard C++. L'unica differenza riguarda i valori restituiti per i valori di origine non validi.

L'opzione /fpcvt:IA fa sì che qualsiasi conversione non valida restituisca un singolo valore sentinel , ovvero il valore di destinazione più lontano da zero. Per la conversione a tipi firmati, sentinel è il valore minimo per tale tipo. I tipi senza segno usano il valore massimo. Le operazioni a virgola mobile possono restituire un valore NaN (Not-a-Number) per indicare un'operazione non valida. Questo indicatore non è un'opzione per la conversione in tipi integer, che non hanno valori NaN. Sentinel viene usato come proxy per un valore NaN, anche se può essere il risultato di una conversione valida.

L'opzione /fpcvt:BC esegue anche la conversione in tipi firmati restituisce il valore minimo possibile quando l'origine non è valida. Tuttavia, la conversione in tipi integer senza segno si basa sulla conversione in long long. Per convertire un valore in unsigned int, il compilatore lo converte prima in tipo long long. Il compilatore tronca quindi il risultato a 32 bit. Per convertire un valore in unsigned long long, i valori di origine validi troppo alti per un long long oggetto vengono gestiti come caso speciale. Tutti gli altri valori vengono prima convertiti in long long e quindi recast in unsigned long long.

Le /fpcvt opzioni sono nuove in Visual Studio 2019 versione 16.8. Se si specificano più opzioni nella riga di /fpcvt comando, l'opzione successiva ha la precedenza e il compilatore genera un avviso.

Funzioni intrinseche per le conversioni

È possibile specificare il comportamento di una conversione specifica indipendentemente dall'opzione /fpcvt , che si applica a livello globale. Il compilatore fornisce funzioni di conversione di sentinel intrinseche per le conversioni compatibili con /fpcvt:IA. Per altre informazioni, vedere Funzioni di conversione di Sentinel. Il compilatore fornisce anche funzioni di conversione saturazione compatibili con le conversioni nelle architetture di destinazione ARM o ARM64. Per altre informazioni, vedere Funzioni di conversione della saturazione.

Il compilatore supporta anche funzioni di conversione intrinseche che vengono eseguite il più rapidamente possibile per le conversioni valide. Queste funzioni possono generare qualsiasi valore o generare un'eccezione per una conversione non valida. I risultati dipendono dalla piattaforma di destinazione, dalle opzioni del compilatore e dal contesto. Sono utili per gestire i valori che sono già stati controllati dall'intervallo o i valori generati in modo che non possano causare una conversione non valida. Per altre informazioni, vedere Funzioni di conversione rapida.

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.

  3. Modificare la proprietà Opzioni aggiuntive per aggiungere /fpcvt:IA o /fpcvt:BC. Scegli OK per salvare le modifiche.

Per impostare l'opzione del compilatore a livello di codice

Vedi anche

Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC
Funzioni di conversione rapida
Funzioni di conversione saturazione
Funzioni di conversione sentinel