/fpcvt (Compatibilidade de conversão de ponto flutuante para inteiro)

Especifica como o compilador trata conversões de ponto flutuante para tipos inteiros.

Sintaxe

/fpcvt:IA
/fpcvt:BC

Arguments

/fpcvt:IA

A /fpcvt:IA opção diz ao compilador para converter valores de ponto flutuante em inteiros para que os resultados sejam compatíveis com as instruções de conversão do Intel AVX-512. Esse comportamento é o comportamento usual no Visual Studio 2019 para destinos x86.

/fpcvt:BC

A /fpcvt:BC opção informa ao compilador para converter valores de ponto flutuante em inteiros não assinados para que os resultados sejam compatíveis com o Visual Studio 2017 e compiladores anteriores. Esse comportamento é o padrão no Visual Studio 2022.

Observações

No Visual Studio 2019 versão 16.8 e versões posteriores, a /fpcvt opção do compilador pode ser usada para controlar os resultados de conversões de ponto flutuante para inteiro. A /fpcvt:BC opção especifica o comportamento padrão do Visual Studio 2022, que é o mesmo que o comportamento do Visual Studio 2017 e versões anteriores. A /fpcvt:IA opção especifica o comportamento compatível com o comportamento da instrução de conversão Intel Architecture (IA) AVX-512. Esta opção pode ser usada com destinos x86 de 32 bits ou x64 de 64 bits e aplica-se quer /arch:AVX512 seja especificada ou não.

Para o Visual Studio 2019, o comportamento padrão para destinos x64 é consistente com /fpcvt:BC a menos que /arch:AVX512 seja especificado. Normalmente, o comportamento para destinos x86 é consistente com /fpcvt:IA, exceto em /arch:IA32, /arch:SSEou às vezes onde o resultado de uma chamada de função é convertido diretamente em um inteiro não assinado. O uso de /fpcvt substitui o padrão, para que todas as conversões sejam tratadas de forma consistente em qualquer um dos destinos. O comportamento das conversões para destinos ARM e ARM64 não é consistente com nenhum dos dois /fpcvt:BC/fpcvt:IA.

A partir do Visual Studio 2022, o comportamento padrão para destinos x64 é consistente mesmo quando /fpcvt:BC/arch:AVX512 é especificado. Para usar o comportamento de conversão do AVX512 com /arch:AVX512o , especifique /fpcvt:IA.

O C++ padrão especifica que, se um valor de ponto flutuante truncado for exatamente representável em um tipo inteiro, ele deverá ter esse valor quando convertido para esse tipo. Caso contrário, qualquer comportamento é permitido. Ambas as /fpcvt opções estão em conformidade com o Standard C++. A única diferença está em quais valores são retornados para valores de origem inválidos.

A /fpcvt:IA opção faz com que qualquer conversão inválida retorne um único valor sentinela , que é o valor de destino mais distante de zero. Para conversão em tipos assinados, a sentinela é o valor mínimo para esse tipo. Os tipos não assinados usam o valor máximo. As operações de ponto flutuante podem retornar um valor Not-a-Number (NaN) para indicar uma operação inválida. Esse indicador não é uma opção para conversão em tipos inteiros, que não têm valores NaN. O sentinela é usado como um proxy para um valor NaN, embora também possa ser o resultado de uma conversão válida.

A /fpcvt:BC opção também faz com que a conversão para tipos assinados retorne o valor mínimo possível quando a origem é inválida. No entanto, a conversão para tipos inteiros não assinados é baseada na conversão para long long. Para converter um valor em unsigned int, o compilador primeiro o converte em tipo long long. O compilador então trunca o resultado para 32 bits. Para converter um valor em unsigned long long, os valores de origem válidos que são muito altos para um long long são tratados como um caso especial. Todos os outros valores são primeiro convertidos e long long depois reformulados em unsigned long long.

As /fpcvt opções são novas no Visual Studio 2019 versão 16.8. Se você especificar mais de uma /fpcvt opção na linha de comando, a opção posterior terá precedência e o compilador gerará um aviso.

Funções intrínsecas para conversões

Você pode especificar o comportamento de uma conversão específica independentemente da /fpcvt opção, que se aplica globalmente. O compilador fornece funções de conversão sentinela intrínsecas para conversões compatíveis com /fpcvt:IA. Para obter mais informações, consulte Funções de conversão do Sentinel. O compilador também fornece funções de conversão de saturação compatíveis com conversões em arquiteturas de destino ARM ou ARM64. Para obter mais informações, consulte Funções de conversão de saturação.

O compilador também suporta funções de conversão intrínsecas que são executadas o mais rápido possível para conversões válidas. Essas funções podem gerar qualquer valor ou lançar uma exceção para uma conversão inválida. Os resultados dependem da plataforma de destino, das opções do compilador e do contexto. Eles são úteis para lidar com valores que já foram verificados no intervalo ou valores gerados de uma forma que não pode causar uma conversão inválida. Para obter mais informações, consulte Funções de conversão rápida.

Para definir essa opção de compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de propriedades do projeto. Para obter detalhes, consulte Definir compilador C++ e criar propriedades no Visual Studio.

  2. Selecione a página de propriedades Configuration Properties>C/C++>Command Line .

  3. Modifique a propriedade Opções Adicionais para adicionar /fpcvt:IA ou /fpcvt:BC. Escolha OK para salvar as alterações.

Para definir essa opção do compilador programaticamente

Consulte também

Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC
Funções de conversão rápida
Funções de conversão de saturação
Funções de conversão sentinela