/fpcvt
(Compatibilidad de conversión de enteros de punto flotante a entero)
Especifica cómo el compilador trata las conversiones de punto flotante a tipos enteros.
Sintaxis
/fpcvt:IA
/fpcvt:BC
Argumentos
/fpcvt:IA
La opción /fpcvt:IA
indica al compilador que convierta valores de punto flotante en enteros para que los resultados sean compatibles con las instrucciones de conversión de Intel AVX-512. Este comportamiento es el comportamiento habitual en Visual Studio 2019 para destinos x86.
/fpcvt:BC
La opción /fpcvt:BC
indica al compilador que convierta valores de punto flotante en enteros sin signo para que los resultados sean compatibles con los compiladores de Visual Studio 2017 y anteriores. Este comportamiento es el valor predeterminado en Visual Studio 2022.
Comentarios
En Visual Studio 2019, versión 16.8 y versiones posteriores, la opción del compilador /fpcvt
se puede usar para controlar los resultados de las conversiones de enteros de punto flotante a entero. La opción /fpcvt:BC
especifica el comportamiento predeterminado de Visual Studio 2022, que es el mismo que el comportamiento de Visual Studio 2017 y versiones anteriores. La opción /fpcvt:IA
especifica el comportamiento compatible con el comportamiento de las instrucciones de conversión de AVX-512 de Intel Architecture (IA). Esta opción se puede usar con destinos x86 de 32 bits o x64 de 64 bits, y se aplica si /arch:AVX512
se especifica o no.
Para Visual Studio 2019, el comportamiento predeterminado para los destinos x64 es coherente con /fpcvt:BC
a menos /arch:AVX512
que se especifique. Normalmente, el comportamiento de los destinos x86 es coherente con /fpcvt:IA
, excepto en /arch:IA32
, /arch:SSE
o a veces donde el resultado de una llamada de función se convierte directamente en un entero sin signo. El uso de /fpcvt
invalida el valor predeterminado, por lo que todas las conversiones se controlan de forma coherente en cualquier destino. El comportamiento de las conversiones para destinos ARM y ARM64 no es coherente con /fpcvt:BC
o /fpcvt:IA
.
C++ estándar especifica que si un valor de punto flotante truncado es exactamente representable en un tipo entero, debe tener ese valor cuando se convierta en ese tipo. De lo contrario, se permite cualquier comportamiento en absoluto. Ambas opciones /fpcvt
se ajustan a Standard C++. La única diferencia es en qué valores se devuelven para los valores de origen no válidos.
La opción /fpcvt:IA
hace que cualquier conversión no válida devuelva un único valor sentinel, que es el valor de destino más alejado de cero. Para la conversión a tipos firmados, sentinel es el valor mínimo de ese tipo. Los tipos sin signo usan el valor máximo. Las operaciones de punto flotante pueden devolver un valor Not-a-Number (NaN) para indicar una operación no válida. Ese indicador no es una opción para la conversión a tipos enteros, que no tienen valores NaN. sentinel se usa como proxy para un valor NaN, aunque también puede ser el resultado de una conversión válida.
La opción /fpcvt:BC
también hace que la conversión a tipos firmados devuelva el valor mínimo posible cuando el origen no es válido. Sin embargo, la conversión a tipos enteros sin signo se basa en la conversión a long long
. Para convertir un valor en unsigned int
, el compilador lo convierte primero en el tipo long long
. A continuación, el compilador trunca el resultado en 32 bits. Para convertir un valor en unsigned long long
, los valores de origen válidos que son demasiado altos para un long long
se controlan como un caso especial. Todos los demás valores se convierten long long
primero en y, a continuación, se vuelven a convertir en unsigned long long
.
Las opciones /fpcvt
son nuevas en Visual Studio 2019, versión 16.8. Si especifica más de una opción /fpcvt
en la línea de comandos, la opción posterior tiene prioridad y el compilador genera una advertencia.
Funciones intrínsecas para conversiones
Puede especificar el comportamiento de una conversión específica independientemente de la opción /fpcvt
, que se aplica globalmente. El compilador proporciona funciones de conversión de sentinel intrínsecas para conversiones compatibles con /fpcvt:IA
. Para obtener más información, consulte Funciones de conversión de Sentinel. El compilador también proporciona funciones de conversión de saturación compatibles con conversiones en arquitecturas de destino ARM o ARM64. Para obtener más información, vea Funciones de conversión de saturación.
El compilador también admite funciones de conversión intrínsecas que se ejecutan lo antes posible para las conversiones válidas. Estas funciones pueden generar cualquier valor o producir una excepción para una conversión no válida. Los resultados dependen de la plataforma de destino, las opciones del compilador y el contexto. Son útiles para controlar los valores que ya se han comprobado el intervalo o los valores generados de una manera que no puede provocar una conversión no válida. Para obtener más información, consulte Funciones de conversión.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.
Modifique la propiedad Opciones adicionales para agregar
/fpcvt:IA
o/fpcvt:BC
. Elija Aceptar para guardar los cambios.
Para establecer esta opción del compilador mediante programación
- Vea AdditionalOptions.
Consulte también
Opciones del compilador de MSVC
Sintaxis de línea de comandos del compilador de MSVC
Funciones de conversión rápida
Funciones de conversión de saturación
Funciones de conversión de Sentinel