Partilhar via


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

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

Sintaxe

/fpcvt:IA
/fpcvt:BC

Argumentos

/fpcvt:IA

A opção /fpcvt:IA informa 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 opção /fpcvt:BC informa ao compilador para converter valores de ponto flutuante em inteiros sem sinal para que os resultados sejam compatíveis com o Visual Studio 2017 e compiladores mais recentes. Esse comportamento é o padrão no Visual Studio 2022.

Comentários

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

No 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:SSE ou algumas vezes em que o resultado de uma chamada de função é convertido diretamente em um inteiro sem sinal. O uso de /fpcvt substitui o padrão, portanto, todas as conversões são tratadas consistentemente em qualquer um dos destinos. O comportamento das conversões para destinos do ARM e ARM64 não é consistente com um /fpcvt:BC nem /fpcvt:IA.

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

A opção /fpcvt:IA faz com que qualquer conversão inválida retorne um único valor sentinel, que é o valor de destino mais distante de zero. Para conversão em tipos com sinal, a sentinela é o valor mínimo para esse tipo. Tipos sem sinal usam o valor máximo. As operações de ponto flutuante podem retornar um valor NaN (não é um número) 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. A sentinela é usada como um proxy para um valor NaN, embora também possa ser o resultado de uma conversão válida.

A opção /fpcvt:BC também faz com que a conversão em tipos com sinal retorne o valor mínimo possível quando a origem for inválida. No entanto, a conversão em tipos inteiros sem sinal baseia-se na conversão em long long. Para converter um valor unsigned int, o compilador primeiro converte-o no tipo long long. Em seguida, o compilador trunca o resultado em 32 bits. Para converter um valor em unsigned long long, valores de origem válidos que são muito grandes para um long long são tratados como um caso especial. Todos os outros valores são convertidos primeiro em long long e, em seguida, convertidos novamente em unsigned long long.

As opções /fpcvt são novas no Visual Studio 2019 versão 16.8. Se você especificar mais de uma opção /fpcvt na linha de comando, a última opção 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 opção /fpcvt , que se aplica globalmente. O compilador fornece funções de conversão sentinelas intrínsecas para conversões compatíveis com /fpcvt:IA. Para obter mais informações, consulte Funções de conversão sentinelas. 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, confira Funções de conversão de saturação.

O compilador também dá suporte a funções de conversão intrínsecas que são executadas o mais rápido possível em conversões válidas. Essas funções podem gerar qualquer valor ou gerar uma exceção para uma conversão inválida. Os resultados dependem da plataforma de destino, das opções do compilador e do contexto. Elas são úteis para lidar com valores que já foram tiveram o intervalo verificado ou valores gerados de uma forma que não possa causar uma conversão inválida. Para obter mais informações, confira Funções de conversão rápidas.

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

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

  2. Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.

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

Para definir essa opção do compilador via programação

Confira também

Opções do compilador MSVC
Sintaxe de linha de comando do compilador MSVC
Funções de conversão rápidas
Funções de conversão de saturação
Funções de conversão sentinelas